PDA

View Full Version : مبتدی: از بین رفتن session ها بعد از 20 دقیقه



Hossein.Dsh
چهارشنبه 22 دی 1389, 22:36 عصر
سلام
من در web.config سایتم از تنظیمات زیر برای تنظیم timeout session استفاده کردم:

<!-- Set Session TimeOut -->
<sessionState timeout ="500" sqlCommandTimeout="500" ></sessionState>
<httpRuntime executionTimeout="30000" />

روی سیستم خودم که سایت رو اجرا میکنم هیچ مشکلی نداره و کاربران مدت طولانی (500 دقیقه) فعال هستند.
اما زمانی که من سایت رو روی هاست میگذارم بعد از 20 دقیقه تمام sessionها از بین میرن.

مقدار Session.Timeout رو توی صفحه اول سایت توی یک لیبل گذاشتمدیدم زمانی که سایت روی هاست بالا میاد timeout = 500 اما بازم session ها بعد از 20 دقیقه از بین میرن!؟

کنترل پنل هاست من Parallels Plesk و تنظیمات IIS برای Session هم نداره.

ممنون میشم راهنمایی کنید.

majnun
چهارشنبه 22 دی 1389, 23:05 عصر
خب معمولا هاست ها اجازه نمیدن بهتون بیشتر از این سشن عمر داشته باشه

اگه میخوای بیشتر باشه از کوکی استفاده کن

Javad_Darvish_Amiry
پنج شنبه 23 دی 1389, 00:31 صبح
دوست خوبم، اول اینکه این مقادیر تو وب کانفیگ با ثانیه تنظیم میشن اما ظاهرا شما ملاکت دقیقه بوده. دوم این که هر کدوم از چیزایی که بالا نوشتی کاربرد خاص زیر رو دارن:
timeout برای تنظیم تایم اوت نشست استفاده میشه که برای 500 دقیقه باید در 60 ضربش کنی یعنی عدد 30000 رو بنویسی
sqlCommandTimeout برای تنظیم مدت زمانی هستش که یه فرمان SQL از ADO.NET منتظر گرفتن جواب از پایگاه میمونه (و نه واکشی داده، یادت باشه، داده ممکنه حتی دقیقه ها طول بکشه بسته به حجمش) که البته پیشنهاد میکنم تغییرش ندی، مقدار پیش فرض فکر کنم 20 یا 30 ثانیه باشه که کاملا کفایت میکنه، بیشتر از اون فقط سربار اضافه است، چون فکر کن آدرس پایگاه بعد از یه مدت عوض میشه و شما در جریان نیستی (این اتفاق تو هاستینگ های ایرانی با توجه به درجه بسیار بالایی که از مشتری مداری و احترام به حقوق مشتریان بینشون رواج داره، زیاد میفته) و حالا یه فرمان به پایگاه ارسال شده و باید 500 دقیقه طول بکشه تا خطای مناسب (سرور پیدا نشد) پرتاب بشه. خودت فکر کن...
executionTimeout زمانی رو که یه Page خاص اجازه اجرا شدن تنظیم میکنه. پیشنهاد اینه که برای صفحات معمولی تغییرش ندی (چون همیشه احتمال حمله هکر های عزیز وجود داره) و فقط برای صفحاتی که قراره از توشون فایلی آپلود بشه و شما سمت سرور باید فایل رو تحویل بگیری و پردازشش کنی، یا برای مثلا مواقعی که باز فایلی رو از پایگاه میخونی و میخوای با یه هندلر به کلاینت تحویل بدی که علی القاعده زمانبر هست (بسته به حجم فایل)، فقط برای اینجور صفحات مقدارش رو به طور مناسب زیاد کن.
در مورد داده هایی که تو وضعیت نشست ذخیره میکنی، حق با majnun هستش و اگه حجم داده زیاد باشه سرور پاکشون میکنه، ولی در مورد تایم اوت سرور کاری به کارت نداره، چون این مسئله مربوط به دات نت هستش و خود دات نت هم با کوکی ها این کارو انجام میده و سرور به طور نرمال تو کار دات نت دخالت نمیکنه مگه این که فایل ماشین کانفیگ رو دستکاری کنن که عموما سرور ها این کارو نمیکنن. چون مدیریتی که خود دات نت داره فوق العاده قدرتمندتر از اونیه که هاستینگ ها بخوان نگران مسایل اینجوری باشن.
پاینده باشید.

Javad_Darvish_Amiry
پنج شنبه 23 دی 1389, 00:50 صبح
راستی یه چیز مهم یادم رفت بگم
شما برای تنظیم تایمی که یوزر میتونه بدون هیچ برهم کنشی با سرور آنلاین بمونه، باید مقدار userIsOnlineTimeWindow رو تو بخش membership تنظیم کنی نه تو sessionState. کاربرد sessionState فرق میکنه؛ ظاهرا اونطور که من متوجه شدم، شما مد نظرت این هست.
این جا حالا میتونی زمان رو بر حسب دقیقه بدی، که مقدار پیش فرض 20 دقیقه هستش.
آها تا دوباره یادم نرفت، چرا تایم آنلاین بودن رو میخوای بالا ببری؟ میدونی که از لحاظ امنیتی توصیه نمیشه؟

Hossein.Dsh
پنج شنبه 23 دی 1389, 15:37 عصر
راستی یه چیز مهم یادم رفت بگم
شما برای تنظیم تایمی که یوزر میتونه بدون هیچ برهم کنشی با سرور آنلاین بمونه، باید مقدار userIsOnlineTimeWindow رو تو بخش membership تنظیم کنی نه تو sessionState. کاربرد sessionState فرق میکنه؛ ظاهرا اونطور که من متوجه شدم، شما مد نظرت این هست.
این جا حالا میتونی زمان رو بر حسب دقیقه بدی، که مقدار پیش فرض 20 دقیقه هستش.
آها تا دوباره یادم نرفت، چرا تایم آنلاین بودن رو میخوای بالا ببری؟ میدونی که از لحاظ امنیتی توصیه نمیشه؟


از توضیحات شما ممنون
دقیقا قصد من همین است
من کاربرانم رو با session شناسایی میکنم. حالا میخوام مدت زمان logon بودن آنها زیاد باشه
آیا userIsOnlineTimeWindow این کار رو برام انجام میده؟
نیازی هست توی session هام تغییری ایجاد کنم؟
اگه ممکنه یک نمونه کد برام بگذارید؟

ممنون

Javad_Darvish_Amiry
پنج شنبه 23 دی 1389, 16:22 عصر
آره عزیزم کارتو راه میندازه و نیازی به تغییر وضعیت نشست نداری. برای نمونه کد هم باید چیز خاصی نیست که نمونه کد بخواد. باید بخش membership تو فایل web.config رو دستکاری کنی. این یه نمونه است:


<membership userIsOnlineTimeWindow="30">
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="LocalSqlServer"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
applicationName="Kavand_Web_Application"
requiresUniqueEmail="true"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="100"
minRequiredPasswordLength="8"
minRequiredNonalphanumericCharacters="2"
passwordAttemptWindow="20"
/>
</providers>
</membership>

چیزای مهم این بخش که معمولا بهشون نیاز داری اینا هستن:
userIsOnlineTimeWindow: تایم آنلاین بودن یه کاربر در شرایطی که هیچ برهم کنشی با سرور نداشته باشه.
connectionStringName: اسم کانکشن استرینگی که به پایگاه داده ای وصل میشه که جدول ها و پروسیجر ها و ویو ها ی membership اون جا هستن
enablePasswordRetrieval: اجازه بازیابی رمز عبور رو صادر یا رد میکنه. اگه بخواد رمز بازیابی بشه، نوع فرمت ذخیره نباید هش باشه، بهتره دستکاریش نکنی
enablePasswordReset: اجازه ریست کردن رمز رو صادر یا رد میکنه. با توجه به هش شدن رمز و غیر قابل بازیابی بودنش به صورت پیش فرض، این گزینه باید رو تایید باشه تا کاربر در صورت نیاز بتونه رمزشو ریست کنه.
requiresQuestionAndAnswer: آیا به سوال و جواب محرمانه نیاز هست یا نه.
applicationName: اسم کاربردت رو اینجا میدی. به صورت پیش فرض یه اسلش (/) هستش. و بهتره برای کاربرد های معمولی تغییرش ندی، اما اگه چند تا کاربرد همزمان دارن از یه پایگاه برای مدیریت کاربران استفاده میکنن، هر کاربرد باید اسم مخصوص خودشو داشته باشه.
requiresUniqueEmail: ایمیل باید منحصر به فرد باشه یا میتونه تکراری هم باشه؟؟؟
passwordFormat: نوع رمز گذاری رمز که بال هم صحبت شد. با توجه با صحبت های شما، و اینکه خیلی اطلاعات نداری ظاهرا، پیشنهاد میکنم سر به سرش نذاری تا یه مطالعه عمیق در مورد مسئله بکنی انشالله.
maxInvalidPasswordAttempts: این خیلی مهمه. تعداد دفعاتی که کاربر میتونه یعنی اجازه داره رمز رو اشتباه وارد کنه تعیین میکنه. پیش فرض 5 هست؛ یعنی اگه کاربر 6 بار رمز رو اشتباه بزنه نام کاربریش قفل میشه. خیلی از تازه کارا اینو نمیدونن (سر خودم هم اون اوایل این بلا یه بار اومد) یه آدم بیکاری میاد چند بار رمز اشتباه میزنه (چون معمولا هممون یه یوزر به اسم Admin یا Administrator داریم و حس زدنش خیلی سخت نیست) و اکانت مدیرو قفل میکنه. باید رو یه عدد بزرگ تنظیم بشه، مگه اینکه برای این مسئله فکر دیگه ای بکنی.
minRequiredPasswordLength: حداقل طول رمز
minRequiredNonalphanumericCharacters: حداقل کاراکتر های غیر حرفی-عددی مورد نیاز تو رمز (مثل +، @، .، &، و غیره)

اینا چیزایین که معمولا نیاز به تغییرشون پیدا میشه. اگه باز سوالی هست در خدمتم. موفق باشید. یا علی

Hossein.Dsh
پنج شنبه 23 دی 1389, 17:26 عصر
آره عزیزم کارتو راه میندازه و نیازی به تغییر وضعیت نشست نداری. برای نمونه کد هم باید چیز خاصی نیست که نمونه کد بخواد. باید بخش membership تو فایل web.config رو دستکاری کنی. این یه نمونه است:


<membership userIsOnlineTimeWindow="30">
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="LocalSqlServer"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
applicationName="Kavand_Web_Application"
requiresUniqueEmail="true"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="100"
minRequiredPasswordLength="8"
minRequiredNonalphanumericCharacters="2"
passwordAttemptWindow="20"
/>
</providers>
</membership>

چیزای مهم این بخش که معمولا بهشون نیاز داری اینا هستن:
userIsOnlineTimeWindow: تایم آنلاین بودن یه کاربر در شرایطی که هیچ برهم کنشی با سرور نداشته باشه.
connectionStringName: اسم کانکشن استرینگی که به پایگاه داده ای وصل میشه که جدول ها و پروسیجر ها و ویو ها ی membership اون جا هستن
enablePasswordRetrieval: اجازه بازیابی رمز عبور رو صادر یا رد میکنه. اگه بخواد رمز بازیابی بشه، نوع فرمت ذخیره نباید هش باشه، بهتره دستکاریش نکنی
enablePasswordReset: اجازه ریست کردن رمز رو صادر یا رد میکنه. با توجه به هش شدن رمز و غیر قابل بازیابی بودنش به صورت پیش فرض، این گزینه باید رو تایید باشه تا کاربر در صورت نیاز بتونه رمزشو ریست کنه.
requiresQuestionAndAnswer: آیا به سوال و جواب محرمانه نیاز هست یا نه.
applicationName: اسم کاربردت رو اینجا میدی. به صورت پیش فرض یه اسلش (/) هستش. و بهتره برای کاربرد های معمولی تغییرش ندی، اما اگه چند تا کاربرد همزمان دارن از یه پایگاه برای مدیریت کاربران استفاده میکنن، هر کاربرد باید اسم مخصوص خودشو داشته باشه.
requiresUniqueEmail: ایمیل باید منحصر به فرد باشه یا میتونه تکراری هم باشه؟؟؟
passwordFormat: نوع رمز گذاری رمز که بال هم صحبت شد. با توجه با صحبت های شما، و اینکه خیلی اطلاعات نداری ظاهرا، پیشنهاد میکنم سر به سرش نذاری تا یه مطالعه عمیق در مورد مسئله بکنی انشالله.
maxInvalidPasswordAttempts: این خیلی مهمه. تعداد دفعاتی که کاربر میتونه یعنی اجازه داره رمز رو اشتباه وارد کنه تعیین میکنه. پیش فرض 5 هست؛ یعنی اگه کاربر 6 بار رمز رو اشتباه بزنه نام کاربریش قفل میشه. خیلی از تازه کارا اینو نمیدونن (سر خودم هم اون اوایل این بلا یه بار اومد) یه آدم بیکاری میاد چند بار رمز اشتباه میزنه (چون معمولا هممون یه یوزر به اسم Admin یا Administrator داریم و حس زدنش خیلی سخت نیست) و اکانت مدیرو قفل میکنه. باید رو یه عدد بزرگ تنظیم بشه، مگه اینکه برای این مسئله فکر دیگه ای بکنی.
minRequiredPasswordLength: حداقل طول رمز
minRequiredNonalphanumericCharacters: حداقل کاراکتر های غیر حرفی-عددی مورد نیاز تو رمز (مثل +، @، .، &، و غیره)

اینا چیزایین که معمولا نیاز به تغییرشون پیدا میشه. اگه باز سوالی هست در خدمتم. موفق باشید. یا علی

سلام
من از membership برای ورود کاربران استفاده نکردم
خودم Login رو ساختم و اگر یوزر و پسورد درست باشه به صورت دستی session ها رو مقدار میدم
درضمن استفاده از membership اینجور که من متوجه شدم نیاز به یک سری تنظیمات توی بانک اطلاعاتی هم داره. مگه نه؟

Javad_Darvish_Amiry
پنج شنبه 23 دی 1389, 21:19 عصر
خوب گلم چرا اینکارو کردی؟ نشست رو چه طوری اداره میکنی؟ از جزئیاتش خبر داری؟ من چون نمیدونم سطح دانش و تجربه شما چقدره (البته استاد ما هستید، قصد توهین ندارم به هیچ وجه، امیدوارم ناراحت نشید) نمی تونم در این مورد هم نظر بدم؛ ولی پیش نهادی که دارم اینه که از همون membership استفاده کنی؛ طبق تجربه من و بر خلاف آن چه چند باری هم تو همین برنامه نویس دیدم، خیلی کامل و بهینه هستش، هر چند ضعف هایی هم مخصوصا تو قسمت مدیریت پروفایل ها داره، اما بخش کاربران و نقش ها، نسبت به آونچه من و شما بخوایم به صورت دستی بنویسیم، واقعا عالیه. برای تنظیم پایگاه هم کار خاصی نیاز نداره. تو Solution Explorer روی آیتم پروژه سایتت (و نه سلوشن) کلیک کن، بالای همون پنجره یه آیکون ظاهر میشه که تولتیپش Web Configuration Manager هست؛ کلیک کن؛ بقیه اش دیگه ویزارده. تو این عمل یه فایل دی بی برات تو App_Data میسازه که همه چی توش هست. اگه باز مشکلی یا نظری هست بگو. موفق باشید.

aserfg
پنج شنبه 23 دی 1389, 22:38 عصر
دوست عزیز کافیه cookieless="true" رو در sessionstate توی وب کانفیگ قرار بدی


<configuration>
<system.web>
<sessionState cookieless="true"
regenerateExpiredSessionId="true" />
</system.web>
</configuration>




http://www.example.com/(S(lit3py55t21z5v55vlm25s55))/orderform.aspx


یعنی در واقع sessionid رو در آدرس ها برای شناسایی نشون می ده

Javad_Darvish_Amiry
پنج شنبه 23 دی 1389, 23:16 عصر
نه عزیزم، منظورم از چطوری این نبود که واقعا چطوری!!! منظورم این بود که این دوستمون به چه روشی این کار رو کرده؛ چون به هر حال این که شما فرمودید یکی از هزاران راه هستش. البته منظور من باز خیلی کلی تر از این حرف ها بود که هنوز منتظر جواب Hossein.Dsh هستم. چون این جا فقط جای SessionId عوض شده و از کوکی به رشته تقاضا رفته؛ اطلاعات نشست کجا ذخیره میشن؟ امنیت؟ واکشی؟ کش؟ رمزنگاری پسوردا؟ اطلاعات کاربر؟ مثل آخرین لوگین و غیره؟ و هزاران چیز دیگه که تو مطلبی ( خودم Login رو ساختم و اگر یوزر و پسورد درست باشه به صورت دستی session ها رو مقدار میدم ) که ایشون نوشتن مشخص نیست چه فکری براش کردن. منظورم تنها به SessionId نبود؛ بلکه پیاده سازی کل سیستم مدیریت کاربران مد نظرم بود. پاینده باشید.

aserfg
جمعه 24 دی 1389, 08:28 صبح
پیاده سازی دستی سیستم لوگین به هیچ وجه پیشنهاد نمی شه . بارها بحث شده

Hossein.Dsh
جمعه 24 دی 1389, 22:14 عصر
سلام
از آقای Darvish و همچنین آقای aserfg ممنونم که زحمت کشیدن و به سوال بنده پاسخ دادند
من خطی که آقای aserfg گفته بودن اضافه کردم اما باز هم روی هاست جواب نداد
آقای درویش هم درست میفرمایند
باید از membership استفاده کرد که امنیت بالایی داره
اما آیا فعلا برای اینکه کار من راه بیفته راه حلی وجود داره؟

Javad_Darvish_Amiry
جمعه 24 دی 1389, 23:46 عصر
خوب دوست عزیز، من هنوز جواب سوال هام رو نگرفتم، شما پس لطف کنید یا کد مربوط به اون بخش رو این جا قید کنید، یا کد رو برامون ارسال کنید تا ببینیم چه کار کردید که بتونیم کمک کنیم. اگه کاربردتون بزرگ نیست، باز پیاده سازی membership فکر کنم بهتر باشه. چون کار باهاش هم (اگه البته کار نکردید تا حالا، یه وقت به حساب بی ادبی نگذارید) خیلی راحت هست و دنگ و فنگ نداره. حداقل تو بخش های مربوطه (لوگین، لوگ اوت، ثبت نام، اداره نشست) چه کار کردید و روش و کدتون چی بوده؟

aserfg
شنبه 25 دی 1389, 09:15 صبح
دوست عزیز :
پیاده سازی ممبر شیپ تنها بر اساس سشنها کار درستی نیست ممبر شیپ asp.net درسته از سشن استفاده می کنه ولی نوعی یکپارچگی با وب سرور برای از بین نرفتن اونا با همچنین تامین امنیت رو برقرار می کنه
خوب حالا بررسی کنیم چرا سشنها ناپایدارن :
Process dependent

Server farm limitations

Cookie dependent

اگه مشکل شما از نوع سوم باشه تو پست قبلی گفتم چکار کنید اگه از نوع دوم باشه و سرور بانک اطلاعاتی شما سیستم جداگانه ی باشه این نسخه شماست :
<configuration>
<sessionstate
mode="sqlserver"
cookieless="false"
timeout="20"
sqlconnectionstring="data source=MySqlServer;
user id=ASPState;
password=1Gr8State"
server="ur ip"
port="ur port"

/>
</configuration>
ip , port رو مربوط به سرور بانکتون ست کنید
اگه مشکلتون از نوع اول بود mode رو تغییر بدین :

<configuration>
<sessionstate
mode="stateserver"
cookieless="false"
timeout="20"
sqlconnectionstring="data source=127.0.0.1;user id=<user id>;password=<password>"
server="127.0.0.1"
port="42424"

/>
</configuration>
mode سه حالت اختیار می کنه : inproc, sqlserver,stateserver

-----------------------------------------------------------------------------------------------------------

این هم راه حل یه برنامه نویسه در codeproject

private void Page_Load(object sender, System.EventArgs e)
{
this.AddKeepAlive();
}
private void AddKeepAlive()
{
int int_MilliSecondsTimeOut = (this.Session.Timeout * 60000) - 30000;
string str_Script = @"
<script type='text/javascript'>
//Number of Reconnects
var count=0;
//Maximum reconnects setting
var max = 5;
function Reconnect(){

count++;
if (count < max)
{
window.status = 'Link to Server Refreshed ' + count.toString()+' time(s)' ;

var img = new Image(1,1);

img.src = 'Reconnect.aspx';

}
}

window.setInterval('Reconnect()',"+ _
int_MilliSecondsTimeOut.ToString()+ @"); //Set to length required

</script>

";

this.Page.RegisterClientScriptBlock("Reconnect", str_Script);

}

<%@ OutputCache Location="None" VaryByParam="None" %>
<html>
</html>موفق باشید.

Hossein.Dsh
شنبه 25 دی 1389, 18:27 عصر
آقای aserfg
sessionstate اصلا خاصیت server و port نداره؟!

آقای درویش روش کار من برای لوگین به صورت زیره:
1- کاربر یوزر و پسش رو وارد میکنه
2- برنامه چک میکنه که آیا یوزر و پس درسته یا نه
3- اگر یوزر و پس درست باشه مقادیر session رو به صورت زیر مقدار میده:
Session["IdUser"] = IdUser
بعد هر موقع که خواستم یوزر رو شناسایی کنم همین session رو میخونم و اطلاعاتش رو بدست میارم

Javad_Darvish_Amiry
یک شنبه 26 دی 1389, 00:28 صبح
با احترام فراوان به استاد خوبم aserfg، در کنار مباحثی که ایشون مطرح کردن، من باز پیشنهاد میکنم برگردید به دیفالت های خود ASP.NET. حالا باز نظر و تصمیم نهایی با توجه به این که فرمودید فعلا میخواید کارتون سریعتر راه بیفته، با خودتونه، دیگه آنچه گفتنی بود، گفته شد و حالا شما باید تصمیم بگیرید. -هیچ وقت یادمون نره که برای حل هر مسئله ای همیشه بیش از یک راه وجود داره، و انتخاب راه به ما و مسئله مون بستگی داره؛ پس این جا با توجه به تمام مباحث مطرح شده و این که همشون هم کارگشا هستن، میتونه براتون(مون) یه تمرین برای پیدا کردن بهترین روش حل مسئله جاری هم باشه.-
برای لوگین و لاگ اوت و ثبت نام، امشب یه پروژه فرضی مینویسم (که فقط این کارها رو انجام بده) و برای این که مطلب کلی تر باشه و از چند جهت فایده داشته باشه، کلا با تگ های HTML توش کار میکنم و تو یه تاپیک جداگانه براتون قرار میدم که امیدوارم بدردتون بخوره. تا دو سه ساعت دیگه حتما میذارم تو سایت. موفق باشید.

mahsa.n
یک شنبه 26 دی 1389, 11:20 صبح
timeout برای تنظیم تایم اوت نشست استفاده میشه که برای 500 دقیقه باید در 60 ضربش کنی یعنی عدد 30000 رو بنویسی

سلام توی این سایت گفته شده timeout بر اساس دقیقه تنظیم میشه
http://article.mjsoft.ir/Default.aspx?ID=15

یه سوال: چه طوری میشه تنظیم کرد که اگر session عمرش به پایان رسید کاربر به فلان صفحه بره؟

Hossein.Dsh
یک شنبه 26 دی 1389, 12:34 عصر
[CODE]

یه سوال: چه طوری میشه تنظیم کرد که اگر session عمرش به پایان رسید کاربر به فلان صفحه بره؟

به صورت زیر

if (Session["TypeUser"] == null)
{
Goto page ...
}

mahsa.n
یک شنبه 26 دی 1389, 12:44 عصر
مرسی که جواب دادین
نمیشه تو session-end این کار رو انجام داد؟

mehrdad201
یک شنبه 26 دی 1389, 13:24 عصر
session end چون در global.asax هست و شی respond اونجا وجود نداره امکان redirect کردن نداره. اما میتونید با دیتابیس کار کنید .

mahsa.n
یک شنبه 26 دی 1389, 14:22 عصر
خوب پس session-end به چه دردی میخوره؟
اینجوری که باید تو هر صفحه که از Session استفاده کردم اول باید چک کنم که null نباشه


من 4 تا session برای هر کاربر دارم اینطوری باید تو هر صفحه چک کنم؟


if (Session["NameId"] == null && Session["family"] == null && Session["UserId"] == null && Session["UserName"] == null)
{
Response.Redirect("~/Fa/LoginP.aspx");
}

Javad_Darvish_Amiry
یک شنبه 26 دی 1389, 15:01 عصر
توی این سایت گفته شده timeout بر اساس دقیقه تنظیم میشه
بله کاملا درسته؛ اشتباه از بنده بوده، چون اون دو تا آیتم دیگه بر حسب ثانیه اند و چند تا آیتم دیگه باز (sqlConnectionRetryInterval، stateNetworkTimeout) هستن که بر حسب ثانیه مقداردهی میشن، من قاطی کردم. شرمنده عذرخواهی میکنم. -الان چند تا لینک مفید براتون پیدا میکنم...-
http://msdn.microsoft.com/en-us/library/h6bb9cz9.aspx
http://msdn.microsoft.com/en-us/library/ms972429.aspx
http://msdn.microsoft.com/en-us/library/ms178586.aspx
http://msdn.microsoft.com/en-us/library/aa479034.aspx
http://msdn.microsoft.com/en-us/library/87069683(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.aspx
http://msdn.microsoft.com/en-us/library/87069683(VS.80).aspx
این آخری رو حتما ببینید؛ یه دوره کامل کرده. موفق باشید.

mahsa.n
یک شنبه 26 دی 1389, 15:04 عصر
هیچ کدوم باز نشدن

Javad_Darvish_Amiry
یک شنبه 26 دی 1389, 15:12 عصر
خوب پس session-end به چه دردی میخوره؟
این رویداد موقعی به درد میخوره که شما سمت سرور (نه کلاینت) میخواهید از اتمام نشست یه کاربر با خبر بشید و یه کاری انجام بدید - مثلا از تعداد کاربران آنلاین یه دونه کم کنید -.
دوست من تو این چند روز که شما درگیر این سوال هستید اگه به نظر من سربه سر خود membership provider میذاشتید تا حالا کارتون راه افتاده بود؛ همه این کارهایی که مد نظرتون هست هم توسط خود پرووایدر مدیریت میشه. من دیشب قول داده بودم که یه برنامه ساده کار با این پرووایدر به صورت دستی (که شما هم خیلی نیاز به تغییرات تو برنامه فعلیت نداشته باشی) براتون آماده کنم؛ اما متاسفانه نشد (واقعا درگیر بودم - والا حتما براتون آماده میکردم) سعی میکنم امشب آخر شب یه نیم ساعتم که شده وقت بذارم و یه چیز sample آماده کنم کارتون راه بیفته؛ ولی شما عجالتا برید سراغ MSDN چند تا لینک هم پست قبلی گذاشتم کمکتون میکنه. تو MSDN این عبارت رو جستجو کنید: ASP.NET Security یا ASP.NET Membership class یا ASP.NET Membership Provider معمولا نمونه کدهای زیاد و کاربردی پیدا میکنید.
در مورد این که پایگاه داده تون رو چطور config کنید هم تو یکی از تاپیک ها تو همین دو سه روزه یه توضیح کامل دادم (بگردید، یادم نیست کدوم بود والله) اینطوری برنامه تون با حداقل تغییرات بهبود چشمگیری پیدا میکنه. خیلی راحته برادرم نترس برو قاطیش شو. از این سردرگمی فعلی خیلی بهتره. شرمنده الان دیگه باید برم تا آخر شب...

Javad_Darvish_Amiry
یک شنبه 26 دی 1389, 15:16 عصر
هیچ کدوم از لینکها باز نشدن
من همین 10 دقیقه پیش اینا رو گرفتم. همین الانم باز چک کردم باز میشن. حتما اشکال از مرورگر یا اینترنت شماست یا فایروال یا (دیگه نمیدونم چی، عقلم قد نمیده). دوباره تلاش کنید. من 11 به بعد کارم تموم میشه آزاد میشم، خواستید این آی دی منه: JD_Amiry@yahoo.com آنلاین کمکتون کنم. متاسفانه الان دیگه بیشتر از این نمیتونم بمونم. بای. شرمنده

mehrdad201
یک شنبه 26 دی 1389, 18:16 عصر
برای پیاده سازی سیستم اعضای ساده بهترین روش (اگه از نظر دیتابیس مشکلی ندارید) همین استفاده از ممبرشیپ مایکروسافت هست. شاید جاهایی انعطاف پذیری کمتری داشته باشه مثل قضایای مربوط به پروفایل که اونم راه هایی براش هست اما از نظر امنیتی و سهولت کار بهترین گزینه است. (البته از نظر بنده)

mahsa.n
دوشنبه 27 دی 1389, 09:39 صبح
من از ممبرشیپ خود .net استفاده میکنم ولی یه جاهایی برای ذخیره اطلاعات اضافی از بانک استفاده کردم
وقتی کاربر لاگین میکنه همین چند تا اطلاعات اضافیشو از بانک میخونم و در سشن میریزم که لازم نباشه هر صفحه اونا از بانک بخونم چون توی هر صفحه از چند تا از این سشن ها استفاده میکنم

Hossein.Dsh
سه شنبه 28 دی 1389, 19:29 عصر
مشکل من حل شد.
از همه دوستانی که بنده را راهنمایی کردند تشکر میکنم
من جداول مربوط به SessionState رو ساختم و تنظیمات آن را در WebConfig انجام دادم. از آن به بعد دیگه کاربران خود به خود خارج نمیشن و هر زمان که من تنظیم کنم از سایت خارج میشن
بازم ممنون