مشكلة في SESSION لا تعمل جيدا رغم عدم وجود أي خطأ
السلام عليكم ورحمة الله وبركاته
قمت بعمل سيشن لحماية صفحات تعديل وتحديث الموقع هذه السيشن تعمل جيدا على فولدر داخلي بمستوى واحد مثال: www.mywebsite.com/adminarea لكنها لا تعمل اذا كان الفولدر اكثر من مستوى مثال: www.mywebsite.com/anotherfolder/adminarea ففي المثال الآخير لاتعمل الشيسن فلو افترضنا ان احد الأشخاص قام بكتابة اسم صفحة داخلية ستفتح الصفحة بدون الدخول على صفحة السؤال عن اسم المستخدم وكلمة المرور وهذا هو كود البي اتش بي في الصفحتين: <?php session_start(); $uname=$_POST['uname']; $upass=$_POST['upass']; $url=$_SERVER['HTTP_HOST']; require("conn.php"); $sql1="select * from username_password"; $result = mysql_query($sql1, $myconn); $row = mysql_fetch_row($result); $validuname=$row[1]; $validupass=$row[2]; if(($uname==$validuname)&&($upass==$validupass)): $session_var="anyvalue"; $_SESSION['session_var'] = $session_var; header("location:http://$url/mywebsite/adminarea/mainadmin.php"); else: header("location:http://$url/mywebsite/adminarea/index.php?m=Invalid Username or Password!"); endif; ?>وجميع الصفحات الداخلية لفولدر تحديث الموقع: <?php session_start(); if(!isset($_SESSION['session_var']) || empty($_SESSION['session_var']) || $_SESSION['session_var']="") { header("location:http://$HTTP_HOST/index.php"); } ?> استخدم PHP5 على BlueHost هل المشكلة في php.ini وما هي التغيرات المطلوبة في هذا الملف جزاكم الله خيرا
1 إجابة
السلام عليكم
العيب ليس فى php.ini او فى الهوست العيب فى طريقة استخدامك للجلسات انت تقوم ببدا جلسة جديدة تمام فى كل ملف باستخدام session_start(); وهذا خطا كليا ، لان عليك بدا الجلسة للمستخدم الواحد مرة واحدة فقط لذلك عليك وضع دالة session_start(); باول سطر ينفذ فى الاسكربت وليكن ملف الكنفج الذى يحتوى على دوال الاتصال بقاعدة البيانات بواسطة: MacOS 2 من 2 أشخاص وجدو هذه الاجابة مفيدة. هل وجدتها؟ نعم لا لقد قمت بحذف session_start الموجودة في الصفحات الداخلية ومازالت لاتعمل يمكنني فتح اي صفحة داخلية بدون ادخال اسم المستخدم وكلمة المرور؟؟ لابد ان تحذفها من الجميع وتتركها فى الصفحة الام ولتكن موجودة فى اول سطر فى الملف conn.php لانك تستدعية فى بدالة كل صفحة الصفحة الموجود فيها session_start الآن هي صفحة login.php ويتم استدعاء هذه الصفحة بعد الضغظ على زر دخول في صفحة index.php فإذا كان اسم المستخدم وكلمة المرور صحيح سيتم الدخول على mainadmin.php واذا لما تكن صحيحة سيتم الرجوع لصفحة index.php واظهار رسالة (خطأ باسم المستخدم) اما ملف conn.php لا توجد فيه اي سيشن فهي دوال الاتصال بقاعدة البيانات فقط يجب ان توجد فيه .. ففكرة الجلسات انك تبدئها مرة واحدة فى اول ملف لانك لو بداتها فى ملف اخر مرة اخرى ستنهى الاولة بجميع ما تحفظ وتبدا من جديد |
معنى انك تستعمل session_start(); جديدة فى كل صفحة انك تقوم بانشاء جلسة جديدة فى كل مرة.
25 / يناير / 2012 الساعة 12:0
انا ارى ان الطريقة كلها شبه خاطئة انظر الى بخصوص فورم تسجيل الدخول
25 / يناير / 2012 الساعة 14:19