PDA

View Full Version : سوال: آفلاین کردن کاربر بعد از 20 دقیقه



sasanrstm
پنج شنبه 14 شهریور 1392, 03:56 صبح
سلام به همه دوستان تعدادی کاربر دارم که میخوام بعد از 20 دقیقه اونارو آفلاین کنم و تو بانک ذخیره کنم مثلا موقع ورود میگم که کاربر 1 شود حالا میخوام بعد از 20 دقیقه خود بخود تو جدولم حالت اونو صفر کنم یا همون آفلاین مثل همین سایت برنامه نویس که اگه کاربر حرکتی تو صفحه نداشته باشه آفلاین میشه ودوباره باید از نو وارد شود.چیکار باید بکنم

nice_boy_a
پنج شنبه 14 شهریور 1392, 13:48 عصر
سلام.
با استفاده از Session، میتونی به Session زمان بدی.

sasanrstm
جمعه 15 شهریور 1392, 07:52 صبح
خب چطوری وکجا باید بنویسم تو مستر پیج بنویسم که تو همه صفحاتی که ارث میبره اعمال بشه میشه بیشتر توضیح بدی البته یه کدی نوشتم که sestion.timeoutee=20 تو مسترپیج در ضمن می خوام موقع خروج کاربر رو ثبت کنم چطوری با سشن اینکارو بکنم راستی دگمه خروج گذاشتم برای کاربر که اگه روش کلیک کنه تاریخ خروجش ثبت بشه اگه کاربری روی دگمه کلیک نکرد وهمینجوری مرور گر و بست ورفت اونو چطوری اعمال کنم که تو بانکم ذخیره بشه تاریخ خروجش کی بوده

nice_boy_a
جمعه 15 شهریور 1392, 17:31 عصر
آره درست نوشتی( Session.timeout)
وقتی کاربر خروج رو کلیک کرد تاریخ خروج ثبت بشه و Session رو حذف کن.
وقتی مرورگر رو بست دیگه نمیتونی کاری کنی(تا اونجایی که من میدونم)

عرفان طباطبایی
جمعه 15 شهریور 1392, 19:36 عصر
با سلام کدتو باید توی Web.config بنویسی

sasanrstm
جمعه 15 شهریور 1392, 21:11 عصر
تو وب کانفیک هم نوشتم اما کد عمل نمیکنه گذاشتمش رو 5 بعد 10 دقیقه سکوت رو دگمه ها که کلیک میکنم کاربر هنوز آنلاینه ؟؟؟

<system.web>
<!--
Set compilation debug="true" to insert debugging
symbols into the compiled page. Because this
affects performance, set this value to true only
during development.
-->
<sessionState mode="InProc" timeout="5"></sessionState>
<customErrors mode="Off"/>
<compilation debug="true">

mohsen200162
جمعه 15 شهریور 1392, 21:31 عصر
از این استفاده کن



<membership>
<providers>
<clear/>
<passwordAttemptWindow="100" passwordStrengthRegularExpression=""/>
</providers>
</membership>

sasanrstm
جمعه 15 شهریور 1392, 21:40 عصر
از این استفاده کن



<membership><membership>
<providers>
<clear/>
<passwordAttemptWindow="100" passwordStrengthRegularExpression=""/>
</providers>
</membership>

من از ممبر شیپ استفاده نکردم خودم کد نویسی کردم بلد هم نیستم چطوری از ممبر شیپ استفاده کنم

salar IT man
سه شنبه 30 اردیبهشت 1393, 22:41 عصر
سلام به همه دوستان تعدادی کاربر دارم که میخوام بعد از 20 دقیقه اونارو آفلاین کنم و تو بانک ذخیره کنم مثلا موقع ورود میگم که کاربر 1 شود حالا میخوام بعد از 20 دقیقه خود بخود تو جدولم حالت اونو صفر کنم یا همون آفلاین مثل همین سایت برنامه نویس که اگه کاربر حرکتی تو صفحه نداشته باشه آفلاین میشه ودوباره باید از نو وارد شود.چیکار باید بکنم

سلام دوست عزبز پیشنهاد میکنم اگر از FormAuthentication استفاده میکنید از کد زیر استفاده کنید:



<authentication mode="Forms">
<forms cookieless="AutoDetect" defaultUrl="~/Default.aspx"
loginUrl="~/Login.aspx" requireSSL="false" timeout="30"
slidingExpiration="true" protection="All" />
</authentication>

اگر کاربر 30 دقیقه فعالیتی نکند با اولین درخواست به صفحه لاگین Redirect میشود
موفق باشید

emad4000
شنبه 24 آبان 1393, 18:24 عصر
سلام دوست عزبز پیشنهاد میکنم اگر از FormAuthentication استفاده میکنید از کد زیر استفاده کنید:



<authentication mode="Forms">
<forms cookieless="AutoDetect" defaultUrl="~/Default.aspx"
loginUrl="~/Login.aspx" requireSSL="false" timeout="30"
slidingExpiration="true" protection="All" />
</authentication>

اگر کاربر 30 دقیقه فعالیتی نکند با اولین درخواست به صفحه لاگین Redirect میشود
موفق باشید

سلام دوست عزیز
من دقیقاً از همین روش استفاده کردم. ولی برنامه اصلاً به عددی که من به عنوان TimeOut وارد کردم توجهی نداره و به هرحال بعد از مدت زمانی LogOut می کنه. مثلاً من برای تست این عدد رو 1 دقیقه وارد می کنم. بعد 5 دقیقه به سیستم دست نمی زنم. ولی بازم کاربر هنوز لاگین هست. حتی TimeOut مربوط به Session رو هم 1 گذاشتم. ولی بی فایده است و کاربر بعد از مدت زمان طولانی Log Out میشه.
ضمن اینکه بعد از LogOut شدن هم Redirect نمیشه به صفحه ای که تو همین بخش تعریف کردم.

کسی نمی دونه مشکل برنامه من از کجاست ؟؟؟؟؟!!!!!؟؟؟

alibehi
شنبه 24 آبان 1393, 19:15 عصر
دوست عزیز از سشن که استفاده کردی هم تو کد نویسی هم در تنظیمات هاست میتونی زمان انقضا برا سشن تعیید کنی

emad4000
شنبه 24 آبان 1393, 19:53 عصر
دوست عزیز از سشن که استفاده کردی هم تو کد نویسی هم در تنظیمات هاست میتونی زمان انقضا برا سشن تعیید کنی

من در فایل Config نرم افزارم زمان انقضای Session رو برابر با 1 گذاشتم. ولی بازم بیشتر از 1 دقیقه است و خیلی باید صبر کنم تا از حالت Login خارج شه.

alibehi
شنبه 24 آبان 1393, 20:48 عصر
راه دوم رو تست کن از تنظیمات خود هاستت
معمولا رو 20 دقیقه از اول قرار داره

emad4000
شنبه 24 آبان 1393, 22:56 عصر
راه دوم رو تست کن از تنظیمات خود هاستت
معمولا رو 20 دقیقه از اول قرار داره

یعنی از تو IIS تغییر بدم؟ خوب از اونجا هم که هرکار کنیم نتیجه اش این میشه که فایل web.config تغییر میکنه. یعنی فرقی نمی کنه که دستی از تو فایل انجامش بدم یا از تو نرم افزار.

ghossein
شنبه 24 آبان 1393, 23:45 عصر
سلام
اگه از ممرشیپ دات نت داری استفاده می کنی باید کد زیر رو داخل فایل وب کانفیگ داخل تگ Configuration وارد کنی تا مثلا هر 1 دقیقه ببینه اگر کاربر فعالیتی نداشته اون logOut کنه یا نه LogIn نگه داره.
عددی رو که می خواهید بدید رو توی خاصیت userIsOnlineTimeWindow="1" وارد کنید، برای مثال من یک دادم .
<membership userIsOnlineTimeWindow="1" defaultProvider="SqlMembershipProvider">

<providers>
<clear />
<add
name="SqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="DBConnectionString"
applicationName="/"
enablePasswordRetrieval="false"
enablePasswordReset="false"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="true"
passwordFormat="Hashed" />

</providers>

</membership>

emad4000
یک شنبه 25 آبان 1393, 00:05 صبح
سلام
اگه از ممرشیپ دات نت داری استفاده می کنی باید کد زیر رو داخل فایل وب کانفیگ داخل تگ Configuration وارد کنی تا مثلا هر 1 دقیقه ببینه اگر کاربر فعالیتی نداشته اون logOut کنه یا نه LogIn نگه داره.
عددی رو که می خواهید بدید رو توی خاصیت userIsOnlineTimeWindow="1" وارد کنید، برای مثال من یک دادم .
<membership userIsOnlineTimeWindow="1" defaultProvider="SqlMembershipProvider">

<providers>
<clear />
<add
name="SqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="DBConnectionString"
applicationName="/"
enablePasswordRetrieval="false"
enablePasswordReset="false"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="true"
passwordFormat="Hashed" />

</providers>

</membership>

ممنون از راهنماییت. ولی من از CustomMembershipProvider که خودم نوشتم استفاده می کنم. کانفیگم اینجوری هست، ولی درست کار نمی کنه :

<configuration>
...
<authentication mode="Forms">
<forms loginUrl="default.htm" timeout="1"/>
</authentication>
...
<membership defaultProvider="OdbcProvider" userIsOnlineTimeWindow="1">
<providers>
<add name="OdbcProvider" type="WorkList.BFL.CustomMembershipProvider" connectionStringName="ConnectionString" enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="true" writeExceptionsToEventLog="true"/>
</providers>
</membership>
<sessionState mode="InProc" customProvider="DefaultSessionProvider" timeout="1">
<providers>
<add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</providers>
</sessionState>
...
</configuration>

ghossein
یک شنبه 25 آبان 1393, 00:19 صبح
سلام
اگه می خواهید از پروایدر سفارشی استفاده کنید ، حتما باید قبل از Add کردن پروایدر باید از تگ <clear /> استفاده کنید در کانفیگی که در پست قبلی گذاشتید این دستور رو ننوشتید. در مورد Session State هم همین طور.

emad4000
چهارشنبه 28 آبان 1393, 16:42 عصر
سلام
اگه می خواهید از پروایدر سفارشی استفاده کنید ، حتما باید قبل از Add کردن پروایدر باید از تگ <clear /> استفاده کنید در کانفیگی که در پست قبلی گذاشتید این دستور رو ننوشتید. در مورد Session State هم همین طور.

این کار رو هم انجام دادم، ولی بازم فایده نداشت :گریه:

محتوی فایل Config من اینه، کسی نمی تونه کمکم کنه ؟؟؟؟؟؟



<?xml version="1.0"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="50000000"/>
</webServices>
</scripting>
</system.web.extensions>
<connectionStrings>
<add name="ConnectionString" connectionString="Data Source=Z-DEV\SQL2008R2;Initial Catalog=...;User ID=...;Password=..." providerName="System.Data.SqlClient"/>
<add name="Zaravand" connectionString="Data Source=Z-DEV\SQL2008R2;Initial Catalog=...;User ID=...;Password=..." providerName="System.Data.SqlClient"/>
<add name="WorkList" connectionString="Data Source=Z-DEV\SQL2008R2;Initial Catalog=...;User ID=...;Password=..." providerName="System.Data.SqlClient"/>
</connectionStrings>
<system.web>
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="Stimulsoft.Report.Web, Version=2012.2.1304.0, Culture=neutral, PublicKeyToken=EBE6666CBA19647A"/>
<add assembly="Stimulsoft.Report, Version=2012.2.1304.0, Culture=neutral, PublicKeyToken=EBE6666CBA19647A"/>
<add assembly="Stimulsoft.Base, Version=2012.2.1304.0, Culture=neutral, PublicKeyToken=EBE6666CBA19647A"/>
</assemblies>
</compilation>
<authentication mode="Forms">
<forms loginUrl="default.htm" timeout="1"/>
</authentication>
<machineKey validationKey="..." decryptionKey="..." validation="SHA1"/>
<membership defaultProvider="OdbcProvider" userIsOnlineTimeWindow="1">
<providers>
<clear/>
<add name="OdbcProvider" type="WorkList.BFL.CustomMembershipProvider" connectionStringName="ConnectionString" enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="true" writeExceptionsToEventLog="true"/>
</providers>
</membership>
<sessionState mode="InProc" customProvider="DefaultSessionProvider" timeout="1">
<providers>
<clear/>
<add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</providers>
</sessionState>
<customErrors mode="Off"/>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="WebServiceSoap" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
<customBinding>
<binding name="WebServiceSoap12">
<textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
messageVersion="Soap12" writeEncoding="utf-8">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</textMessageEncoding>
<httpTransport manualAddressing="false" maxBufferPoolSize="524288"
maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous"
bypassProxyOnLocal="false" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard"
keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous"
realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
useDefaultWebProxy="true" />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="http://172.16.0.24:9040/WebService.asmx" binding="basicHttpBinding"
bindingConfiguration="WebServiceSoap" contract="SMSWebservices.WebServiceSoap"
name="WebServiceSoap" />
<endpoint address="http://172.16.0.24:9040/WebService.asmx" binding="customBinding"
bindingConfiguration="WebServiceSoap12" contract="SMSWebservices.WebServiceSoap"
name="WebServiceSoap12" />
</client>
</system.serviceModel>
</configuration>

emad4000
دوشنبه 10 آذر 1393, 19:27 عصر
سلام دوست عزیز
من دقیقاً از همین روش استفاده کردم. ولی برنامه اصلاً به عددی که من به عنوان TimeOut وارد کردم توجهی نداره و به هرحال بعد از مدت زمانی LogOut می کنه. مثلاً من برای تست این عدد رو 1 دقیقه وارد می کنم. بعد 5 دقیقه به سیستم دست نمی زنم. ولی بازم کاربر هنوز لاگین هست. حتی TimeOut مربوط به Session رو هم 1 گذاشتم. ولی بی فایده است و کاربر بعد از مدت زمان طولانی Log Out میشه.
ضمن اینکه بعد از LogOut شدن هم Redirect نمیشه به صفحه ای که تو همین بخش تعریف کردم.

کسی نمی دونه مشکل برنامه من از کجاست ؟؟؟؟؟!!!!!؟؟؟

من خودم مشکل برنامه ام رو فهمیدم. اینجا می نویسم تا اگه شخص دیگه ای هم این مشکل رو داشت مطالعه کنه
این TimeOut که تو فایل Web.Config نوشته میشه در واقع زمان Regenerate شدن کوکی مربوط به این روش هست. شما اگه بخوای زمان آفلاین شدن کاربر رو عوض کنین باید در کد C# تون زمانی که دارین Ticket می سازین، اونجا زمان Expire شدن کوکی رو مشخص کنید.
مثلاً من تو این کد زمان Expire شدن رو یک ساعت پس از Login مشخص می کنم :


FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, "Emad", DateTime.Now, DateTime.Now.AddHours(1), true, "1");