PDA

View Full Version : سوال: ایجاد session های مختلف با expiration های مختلف



Arsess
جمعه 27 خرداد 1390, 14:55 عصر
چطور میشه session های مختلف با expiration های مختلف ایجاد کرد؟

مثلا یکی با بسته شدن براوزر از بین بره و دیگری تا ۲ هفته باقی بمونه.

eshpilen
جمعه 27 خرداد 1390, 22:25 عصر
یه نگاهی به این تاپیک بکنید:
http://forum.iranphp.org/Thread-%D9%86%DA%A9%D8%A7%D8%AA%DB%8C-%D8%AF%D8%B1%D9%85%D9%88%D8%B1%D8%AF-%D8%AA%D8%B9%DB%8C%DB%8C%D9%86-%D8%B2%D9%85%D8%A7%D9%86-%D8%A7%D8%B9%D8%AA%D8%A8%D8%A7%D8%B1-%D8%B3%D8%B4%D9%86
بنظرم اینجا هم چنین تاپیکی داشتم ولی پیداش نکردم.

سیستم سشن PHP یخورده پیچیده تر از اونی هست که فکر میکنید و ظرافت های خاصی داره.
من خودمم الان دقیق حضور ذهن ندارم و واسه همین چیزی نمیگم، ولی اگر خوندی و به مشکل خوردی بگو.

Arsess
یک شنبه 29 خرداد 1390, 00:38 صبح
ممنون از لینکی که دادید ولی جواب من توش نبود. میشه توی پی اچ پی کوکیهایی با عمرهای متفاوت ایجاد کرد. دستورش هست. من زدم ولی نشد. با جاوااسکریپت هم زدم، نشد. واسه همین هم یه تاپیک تو تالار جاوااسکریپت زدم.

http://barnamenevis.org/showthread.php?291935-%DA%86%D9%87-%D9%88%D9%82%D8%AA-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1-%D8%A8%D8%B1%D8%A7%D9%88%D8%B2%D8%B1-%D8%B1%D8%A7-%D9%85%DB%8C%D8%A8%D9%86%D8%AF%D8%AF%D8%9F

eshpilen
یک شنبه 29 خرداد 1390, 09:16 صبح
باید این کارا رو بکنی:

1) باید دایرکتوری سشن های خودت رو از پیشفرض به مکانی که با کاربران دیگر هاست قاطی نشه تغییر بدی.
با استفاده از تابع session_save_path این کار رو انجام میدی.

2) زمان انقضای سشن رو برابر بیشترین طول عمر سشن که در برنامه هات میخوای استفاده کنی قرار بده.
با استفاده از تعیین session.gc_maxlifetime بوسیلهء تابع ini_set این کار رو انجام بده.

3) بعد زمان اعتبار هر سشن رو برای هر کاربر میتونید با استفاده از تعیین زمان انقضای کوکی سشن تعیین کنید.
با استفاده از تعیین session.cookie_lifetime و قبل از استارت کردن سشن.

دستورات مربوط به این کارها رو باید در هر فایل PHP قبل از هرگونه استفاده از سشن اجرا کنید. قبل از استارت کردن سشن.
شما این کارها رو کردید و جواب نداده؟

Arsess
دوشنبه 30 خرداد 1390, 14:52 عصر
مشکل من چیز دیگه ایه. میخوام برای هر کاربر ۲ سشن داشته باشم. یکی برای لاگین که عمرش ۲ هفتس و دومی برای همون کاربر ولی به طول عمر صفر. یعنی با بسته شدن براوزر دومی از بین بره ولی کاربر لاگین باقی بمونه. در حقیقت بیشتر تمایل دارم که دومی کوکی باشه نه سشن و با اینکار میخوام با بسته شدن براوزر توسط کاربر ، کوکی مربوطه ازبین بره و من کاربر رو آفلاین کنم ولی اون لاگین بمونه.
امیدوارم منظورم رو خوب بیان کرده باشم.

eshpilen
دوشنبه 30 خرداد 1390, 23:35 عصر
خب مشکل کجاست؟
اگر بخوای دوتا سشن با مشخصات مختلف داشته باشی میتونی. میتونی از تابع session_name قبل از استارت هر سشن بصورت مجزا استفاده کنی.درمورد کوکی هم که کار ساده ایه و نباید مشکل خاصی داشته باشه.

MSN_Issue
سه شنبه 31 خرداد 1390, 09:55 صبح
سلام دوست عزیز
پیشنهاد میکنم کلا از سشن استفاده نکنی چون به راحتی دزدیده مشه !!!!(البته من خودم بلد نیستم ولی از اطرافیانم زیاد شنیدم !)
شما به راحتی میتونی این کار رو با دیتابیس انجام بدی !(یعنی کلا کار سشن رو با دیتابیس شبیه سازی کنی )

Arsess
سه شنبه 31 خرداد 1390, 11:50 صبح
من فقط میخوام خروج کاربر رو تحت کنترل بگیرم. اینکار با سشن انجام پذیر نیست. با اینکه یه کوکی با عمر صفر تعریف کردم، این کوکی بعد از بسته شدن براوزر، ازبین نمیره. طبیعیه که من عمر سشنها و کوکیهامو ۲ هفته تعیین کردم چون میخوام کاربر لاگین بمونه. فکر نمیکنم مشکل عجیبی باشه. خیلیا اینکارو میکنن ولی چجوریش رو نمیدونم.

blackmak
سه شنبه 31 خرداد 1390, 16:38 عصر
از session و کوکی با هم استفاده کنید
session برای بسته شدن browser و کوکی برای login موندن کاربر

Arsess
سه شنبه 31 خرداد 1390, 22:16 عصر
طول عمر هردوشون با یه دستور تعیین میشه. با اینحال:

با اینکه یه کوکی با عمر صفر تعریف کردم، این کوکی بعد از بسته شدن براوزر، ازبین نمیره.
اصلا کار نمیکنه. تمام سایتهایی که لاگین دارن و لاگینشون Remember me داره و میخوان وضعیت آنلاین بودن کاربراشونو کنترل کنن، همین مشکلو دارن. البته ندارن، مشکلو حل کردن. من نمیدونم چجوریه.

mtchabok
پنج شنبه 02 تیر 1390, 10:25 صبح
عزیزم ما دو تا سشن نداریم .
ما در هر بار اجرای برنامه می تونیم حداکثر در لحظه به یه سشن دسترسی مستقیم داشته باشیم .
واسه همین شما میتونید اطلاعاتی رو که برای کارهای روزمره هس رو در سشن قرار بدید تا بتونید به راحتی اطلاعات رو ردوبدل کنید و واسه لاگین زماندار هم میتونید از کوکی و یه جدول استفاده کنید به این صورت که به هر کاربری که لاگین میشه یه شماره تصادفی بهش اختصاص بدید و در جدول مربوطه وارد کنید و سپس اون شماره رو با کوکی روی مرورگرش ست کنید .

eshpilen
پنج شنبه 02 تیر 1390, 11:01 صبح
بنظرم میشه از دوتا سشن با استفاده از تابع session_name استفاده کرد. منتها باید یک سشن رو باز کنیم و اطلاعاتی رو که لازم داریم و در اون سشن ذخیره کرده بودیم (مثل نام کاربری) بخونیم و بعد اون سشن رو ببندیم و سشن بعدی رو باز (استارت) کنیم (قبل از استارت باید نام هر سشن مورد نظر رو با تابع session_name تعیین کرده باشیم).
موقع ایجاد سشن و ذخیره در اون هم به همین نحو هست.

درواقع به ازای هر نامی که با استفاده از session_name تعیین میکنیم یک کوکی سشن با همون نام در کلاینت ایجاد میشه که حاوی کد فایل سشن مختص خودش هست. برای هر سشن با یک نام یک فایل سشن مختص خودش هم ایجاد میشه.

Arsess
پنج شنبه 02 تیر 1390, 11:26 صبح
چقدر از همتون ممنونم که اینقدر وقت گذاشتین. همه این مطالب روشنه فقط اگه کسی میدونه، لطف کنه بگه با این شرایط چطور میتونم بسته شدن براوزر رو توسط کاربر تحت کنترل بگیرم؟

eshpilen
پنج شنبه 02 تیر 1390, 11:43 صبح
سوال شما بیش از حد کلی، مبهم و مقدماتی هست.
ببخشید ولی طوری که انگار هیچی از برنامه نویسی نمیدونید و انتظار دارید دیگران برنامهء شما رو قطعه قطعه براتون بنویسن.

Arsess
پنج شنبه 02 تیر 1390, 12:19 عصر
بنده شدیدا عذر میخوام ولی این سوال مبهم و مقدماتی از دید شما رو حتی مدیر سایت هم جواب نداد. نه بخاطر مبهم و مقدماتی بودنش، بلکه من فکر میکنم شما یا فوق العاده خیلی حرفه ای هستین (که با توجه به پستهاتون حتما همینطوره) یا وارد گود نشدین.
http://barnamenevis.org/showthread.php?291935-%DA%86%D9%87-%D9%88%D9%82%D8%AA-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1-%D8%A8%D8%B1%D8%A7%D9%88%D8%B2%D8%B1-%D8%B1%D8%A7-%D9%85%DB%8C%D8%A8%D9%86%D8%AF%D8%AF%D8%9F&p=1283425#post1283425
لطف کنین اگه یه سایت نوشتین که کاربر توش لاگین میشه و بعد از بسته شدن براوزر لاگین میمونه و توش مجبورین که از سشنها و کوکیهای مختلف استفاده کنین و طبیعتا این سایت فقط یک صفحه نداره، بسته شدن براوزر رو کنترل کنین و من سراپا تقصیر رو راهنمایی بفرمایین. میدونم نیاز ندارین ولی بنده شخصا از ده تا از پستهاتون تشکر میکنم.
نمیگم نمیشه. میشه ولی مسئله نتنها ابتدائی نیست بلکه هرکسی جوابو نمیدونه.

mtchabok
جمعه 03 تیر 1390, 14:50 عصر
عزیزم من و دوستان در پست قبلی گفتیم که باید چیکار کنید ... !
خوب دوباره میگم :
ببنید برای کاربری که میخواید پس از بسته شدن مرورگر اطلاعات سشن حذف بشه باید سشن رو بدون زمان ست کنید که با اینکار کوکی مربوط به سشن در هنگام بسته شدن مرورگر حذف میشه و عملا دیگه به صورت طبیعی دسترسی به اطلاعات سشن وجود نداره .
خوب برای لاگین زماندار هم باید یه کوکی دیگه برای کاربر بفرستید و اینکار رو خودتون به صورت دستی باید انجام بدید و بهش هم باید زمان انقضا داده بشه که با اینکار شما میتونید کاربر رو تا زمان انقضای کوکی لاگین نگه دارید .

واسه اطلاعات کوکی سشن از این تابع استفاده کنید : session_set_cookie_params
و برای ارسال کوکی لاگین هم از setcookie