PDA

View Full Version : مشکل با SESSION



abolfazl-z
جمعه 16 فروردین 1392, 18:46 عصر
سلام دوستان :لبخندساده:
من یک مشکل دارم.

چهار کد دارم که همه داخل یک پوشه و بصورت زیر هست:

کد index.php :


<html>
<body>
<form action = "check.php" method="post">
<img src="pic_maker.php" />
<input name="code"></input>
<button>Check</button>
</form>
</body>
</html>

کد pic_maker.php :


<?php
session_start();
$_SESSION['pic_securety'] = rand(100,999);
header ("content-type:image/png");
$pic = imagecreate(50,40);
$pic_bg_color = imagecolorallocate($pic,0,0,0);
$pic_text = $_SESSION['pic_securety'];
$pic_text_color = imagecolorallocate($pic,255,255,255);
imagestring($pic,5,10,10,$pic_text,$pic_text_color );
imagepng($pic);
return imagedestroy($pic);
?>

کد check.php :


<?php
session_start();
if (isset($_SESSION['pic_securety']))
{
if ($_POST['code'] == $_SESSION['pic_securety'])
echo "Code Is True.";
else
echo "Code is Mistake";
}
else
echo "no set";
unset($_SESSION['pic_securety']);
?>

و کد session.php :


<?php
session_start();
echo $_SESSION['pic_securety'] . "</br>";
?>

خوب دوستان همه چی درست هست ولی یک سوال برام پیش میاد که چرا زمانی که من به صورت مستقیم به صفحه pic_maker.php رجوع میکنم و یک عددی مثل 123 (یعنی همان عکس) دریافت می کنم و در همان لحظه به صفحه session.php رجوع میکنم اون عدد تغییر کرده است ؟؟؟؟ چرا نباید همان 123 باشد ؟؟؟:متفکر::متفکر:

با تشکر

siavashsay
جمعه 16 فروردین 1392, 19:46 عصر
با هربار رفرش شدن - اجرا شدن - تعویض صفحه و به هرنوعی تغییر - سشن ها مجدد مقدار دهی میشن !
شما نمیتونی در آن واحد 2 صفحه رو که حاوی یک سشن هستن باز کنی و یک مقدار ثابت رو ببینی ! آخرین صفحه ای که باز میشه حاوی آخرین مقدار سشن ایجاد شده هست !
موفق باشید

abolfazl-z
جمعه 16 فروردین 1392, 20:17 عصر
با هربار رفرش شدن - اجرا شدن - تعویض صفحه و به هرنوعی تغییر - سشن ها مجدد مقدار دهی میشن !
شما نمیتونی در آن واحد 2 صفحه رو که حاوی یک سشن هستن باز کنی و یک مقدار ثابت رو ببینی ! آخرین صفحه ای که باز میشه حاوی آخرین مقدار سشن ایجاد شده هست !
موفق باشید

خوب دوست عزیز درسته دیگه.

من به صفحه pic_maker.php میروم یک عدد دریافت می کنم (123) و دیگر وارد صفحه نمیشوم(پس این مقدار (123) آخرین مقدار هست) که دوباره تغییر کند و فقط از طریق صفحه session.php محتویات داخل session ام را میبینم . که ان مقدار(123) تغییر کرده هست(مثلا 159) و اگر مشاهده کنید میبینید که در صفحه session.php کدی وارد نشده که سشن pic_securety رو تغییر بده و فقط تغییر یکبار صور گرفته . پس چرا در صفحه session.php مقدار تغییر می کند ؟

MMSHFE
جمعه 16 فروردین 1392, 21:44 عصر
1- اون return آخر pic_maker.php اضافه است. (فقط دستور return).
2- با کد زیر تصویر رو توی فرمتون نشون بدین و مستقیماً بازش نکنید:

<img src="pic_maker.php" type="image/png" />
3- دقت کنید که هربار به این فایل دسترسی پیدا کنید (چه مستقیم، چه نمایش ازطریق تگ img) یک سشن جدید تولید خواهد شد.

abolfazl-z
جمعه 16 فروردین 1392, 22:24 عصر
اون return آخر pic_maker.php اضافه است. (فقط دستور return).
2- با کد زیر تصویر رو توی فرمتون نشون بدین و مستقیماً بازش نکنید:

<img src="pic_maker.php" type="image/png" />3- دقت کنید که هربار به این فایل دسترسی پیدا کنید (چه مستقیم، چه نمایش ازطریق تگ img) یک سشن جدید تولید خواهد شد.


return رو یادم رفت:اشتباه:.(حافظه رو داشتی :لبخند:)

ولی من باز هم جوابم رو نگرفتم.
چرا بصورت مستقیم وارد صفحه pic_maker.php میشیم اون شماره ای که تولید میکنه اشتباه هست ؟؟؟
یعنی توی صفحه session.php یک چیز دیگر نشان میدهد.ولی از طریق تگ وارد بشیم، درست هست.
-------------------------------------------------------------------
بگذارین قشنگ توضیح بدهم :
شما ابتدا فایل ضمیمه رو دانلود کنید.
سپس رو لوکال هاست خود کپی کنید.
سپس به صفحه اصلی یعنی فایل inde.php بروید.
خوب بر فرض مثال عدد 500 را مشاهده می کنید.
خوب حالا در همان زمان تب جدید باز کنید و به صفحه session.php بروید.
خوب حالا عدد 500 رو مشاهده می کنید.
تا اینجا درست.
---------------
حالا شما به صفحه pic_maker.php بروید.
خوب بر فرض مثال عدد 400 رو مشاهده می کنید.
حال تب جدید باز کرده و به صفحه session.php بروید.
خوب عددی که مشاهده می کنید 400 نیست و یک عدد دیگر هست چرا ؟ (برای من اینطوری هست:متفکر:)

1023641-

navid3d_69
جمعه 16 فروردین 1392, 23:23 عصر
من تست کردم درسته الان picmaker روی 402 هست و session هم 402 هست حتما یک جایی این picmaker رو include کردی و توی یک صفحه اجر میشه که تغییر می کنه

MMSHFE
شنبه 17 فروردین 1392, 00:00 صبح
جالبه. وقتی توی فایل pic_maker.php تابع sleep با مقدار مثلاً 3 رو میگذارم، توی session.php هم موقع اجرا 3 ثانیه در دفعه اول مکث ایجاد میشه. احتمالاً یه جایی خروجی داره بافر میشه. باید بیشتر بررسی کنم.

MMSHFE
شنبه 17 فروردین 1392, 00:11 صبح
توی کروم اینطوری نمیشه و درست نشون میده. تا اینجا مشکل از فایرفاکس بوده.

navid3d_69
شنبه 17 فروردین 1392, 00:22 صبح
من با کروم چک کردم مشکلی نبود من پارسال یک مشکل اینجوری داشتم توی یک قسمت با سشن کلا اون قسمت رو تغییر داردم : دی

MMSHFE
شنبه 17 فروردین 1392, 00:32 صبح
بعد از کلی بررسی، نتیجه قطعی بدست آمده این شد: FireFox یک مشکل (Bug) داره که باعث میشه در اطلاعاتی که بصورت Stream دریافت میشن (مثل تصاویری که با GD تولید میشه و مستقیماً توی آدرس بار تایپ میشن و اصطلاحاً بهشون octet-stream میگن - بطور کلی هرگونه محتوای غیر از متن عادی)، نتونه انتهای اطلاعات رو تشخیص بده درنتیجه با درخواست بعدی که از همون سرور میاد، مجدداً اون فایل فراخوانی میشه و بصورت یک Indirect Request مورد دسترسی قرار میگیره (مشابه وقتی که با تگ img درخواستش میکنید) تا پایان اطلاعات کشف بشه. بخاطر همینه که کد سشن شما تغییر میکنه و این مسئله هیچ ارتباطی به PHP نداره. برای اطمینان، میتونید توی فایل pic_maker.php دستور زیر رو بگذارین:

sleep(3);
و خواهید دید که با اجرای فایل session.php باز هم 3 ثانیه در اولین اجرا، مکث ایجاد میشه و در اجراهای بعدی مکثی در کار نخواهد بود. جالبه که این مشکل توی Chrome و Opera و از همه عجیبتر، حتی توی IE هم وجود نداره! (البته من با IE9 تست کردم).

abolfazl-z
شنبه 17 فروردین 1392, 10:33 صبح
واقعا مرسی.:تشویق:

اگر پاسخ نمیدادینا کم کم داشتم دیونه میشدم:عصبانی++: