PDA

View Full Version : استفاده از دو سشن مختلف در یک درخواست



eshpilen
دوشنبه 08 خرداد 1391, 14:33 عصر
الان من این کد رو اجرا میکنم:

<?php

session_name('sess1');
session_start();
$_SESSION['a']=1;
session_write_close();

session_name('sess2');
session_start();
$_SESSION['b']=2;
session_write_close();

session_name('sess1');
session_start();

echo '<pre>';
print_r($_SESSION);
echo '</pre>';

?>
انتظار دارم متغییرهای تعریف شده در دو سشن مجزا ایجاد بشن. ولی اینطور نیست. فایل سشن رو اگر چک کنید یک فایل مشترک برای هردو سشن ایجاد میشه و هر دو متغییر در همون ذخیره میشن. البته خود برنامه هم آرایهء _SESSION رو پرینت میکنه میبینید که اونطور که میخواستیم و انتظار میرفته عمل نمیکنه.
بنظرتون چرا و راه حلش چیه؟

us1234
دوشنبه 08 خرداد 1391, 14:47 عصر
سلام
تا اونجایی که من میدونم سیشن یه آرایه اس پس باید با ایندکسی که مقداری بهش دادی به همون هم بخونی برای خوندن فقط این کار را بکن

echo $_SESSION['b'];

MMSHFE
دوشنبه 08 خرداد 1391, 15:09 عصر
دوست عزیز، session_name فقط اسم سشن رو که قراره ازطریق اون به روش GPC مقدار Session ID بین کلاینت و سرور ردوبدل بشه تغییر میده و ربطی به اسم فایل و نوع ذخیره کردن سشن روی سرور نداره. برای درک بهتر، اینجا (http://ir.php.net/manual/en/function.session-name.php) و فایل php.ini (قسمت session.name) رو نگاه کنید:

session.name = PHPSESSID
موفق باشید.

lady64
دوشنبه 08 خرداد 1391, 16:10 عصر
session_write_close(); لازمه ؟ من هیچ وقت استفاده نمیکردم

MMSHFE
دوشنبه 08 خرداد 1391, 17:13 عصر
نه استفاده از این تابع ضروری نیست چون با پایان اسکریپت بطور خودکار فراخوانی میشه ولی همونطور که توی توضیحاتش (http://ir.php.net/manual/en/function.session-write-close.php) اشاره شده، در مواقع خاص (مثلاً استفاده از چند فریم توی یک صفحه)، چون همزمان فقط یک اسکریپت اجازه کار با فایل سشن رو داره، بقیه فریمها منتظر تموم شدن کار فریم جاری باقی میمونن که ممکنه سرعت پردازش صفحه رو پایین بیاره. بنابراین، اگه هر زمان کار شما با سشن تمام شد و توی بقیه اسکریپت کاری با سشن ندارین (اعم از خوندن و نوشتن)، میتونید این تابع رو صدا بزنید تا تغییرات توی فایل سشن نوشته بشه و سشن رو ببنده. اینطوری همزمان با پردازش بقیه اسکریپت (مربوط به فریم جاری)، بقیه فریمها هم که به سشن نیاز دارن، میتونن همزمان پردازش بشن و درنتیجه سرعت پردازش و درنتیجه تولید خروجی نهایی با همزمان شدن پردازش چند اسکریپت، افزایش پیدا میکنه.
موفق باشید.

eshpilen
دوشنبه 08 خرداد 1391, 20:10 عصر
دوست عزیز، session_name فقط اسم سشن رو که قراره ازطریق اون به روش GPC مقدار Session ID بین کلاینت و سرور ردوبدل بشه تغییر میده و ربطی به اسم فایل و نوع ذخیره کردن سشن روی سرور نداره. برای درک بهتر، اینجا (http://ir.php.net/manual/en/function.session-name.php) و فایل php.ini (قسمت session.name) رو نگاه کنید:

session.name = PHPSESSID
موفق باشید.
اگر نام سشن رو در دو صفحه متفاوت قرار بدی دو تا سشن کاملا جداگانه میشن. چون اسم کوکی سشن و ID داخلش و فایل سشن جدا خواهند بود. یعنی شما میتونی برای هر کاربر سایتت بیش از یک سشن داشته باشی و در بخشهای مختلف سایتت از هرکدام از اون سشنها که خواستی استفاده کنی. مثلا در example.com/app1 میتونی sess1 رو استارت و استفاده کنی و در example.com/app2 میتونی از sess2 استفاده کنی. این دو سشن کاملا مجزا از هم خواهند بود و کوکی سشن هردو بصورت جداگانه در مرورگر کاربر ذخیره میشه و روی سرور هم دو فایل سشن مجزا خواهند بود که بنابراین داده های داخل اونها از هم کاملا جداست و با هم تداخل نمیکنه.
اما من میخواستم در یک فایل همزمان از دو سشن مجزا استفاده کنم که متاسفانه نشد.
میخوام از دوتا سشن مجزا استفاده کنم چون میخوام برنامم طوری باشه که هرکس بتونه ازش در برنامه و کدهای خودش استفاده کنه (فایلهای برنامهء من رو اینکلود میکنه) بدون اینکه فایل و تنظیمات سشن برنامهء من با سشن برنامه های دیگران تداخل پیدا کنه.
و اگر نشه این کار رو کرد بنظرم اصلا جالب نیست و جای تعجب داره. چون من فکر میکردم یکی از اهداف این قابلیت همینه که بشه در یک صفحه هم سشن های مجزا داشت. اما حالا که نداره کاربردش به فایلهای مجزا محدود میشه.