PDA

View Full Version : سوال: روشی به جای استفاده از سشن در php (حل شد)



masoomenoroozi
دوشنبه 14 اسفند 1391, 12:17 عصر
سلام دوستان
سایتی رو طراحی کردم که تو بعضی از صفحات اون اجبارا از سشن استفاده کردم . تا چند روز پیش سایت به درستی کار میکرد ولی چند روزه مشکل داره و اون هم اینه که سشن ها مقدار میگیرن و در همون صفحه چاپ میشن ولی تو بقیه صفحات مقدار ندارن و صفرهستن.
حالا برای این مشکل راه حلی هست یا نه؟
میشه از متغیر استفاده کرد ؟ (آخه متغیر عمومی هم فکر کنم فقط توی یه صفحه شناخته شدس )

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

ممنون.........................

mokha21
دوشنبه 14 اسفند 1391, 12:21 عصر
کدهاتون رو بزارید.(هم صفحه ای که سشن چاپ میشه و هم صفحه ای که سشن مقدار نداره)

Reza1607
دوشنبه 14 اسفند 1391, 12:47 عصر
احتمالا تو صفحاتي كه سشن مقدر نداره يا صفر سشن رو استارت نكرده باشيد

masoomenoroozi
دوشنبه 14 اسفند 1391, 12:48 عصر
ممنون از همکاریتون ولی سشن ها فقط توی یه صفحه نیست که بخوام براتون بزرام . اگه ممکنه فقط بگین که چطور میشه این مشکلو برطرف کرد آخه قبلا همین دستورا کار میکردن توی لوکال هاستم کار میکنه به نظرتون مشکل از هاسته؟؟؟؟؟؟؟؟/

masoomenoroozi
دوشنبه 14 اسفند 1391, 12:48 عصر
چرا سشن استارت شده ولی بازم کار نمی کن

masoomenoroozi
دوشنبه 14 اسفند 1391, 13:00 عصر
خواهش میکنم یکی جواب بده خیلی فوریه....................خواهش

MRmoon
دوشنبه 14 اسفند 1391, 13:07 عصر
شاید سشن ها رو در جای دیگه مقدار دهی کردید یا مشکلاتی از این قبیل!

در ضمن از کوکی هم میشه استفاده کرد ولی کاربر میتونه کوکی ها رو تغییر بده

masoomenoroozi
دوشنبه 14 اسفند 1391, 13:18 عصر
آخه مشکل اینجاس که کوکی هم جواب نمیده . متغیری مثل سشن وجود داره آیا؟؟؟

AbiriAmir
دوشنبه 14 اسفند 1391, 13:43 عصر
شاید مثلا آدرس جایی رو که سشن ذخیره میشه با www وارد میکنید و جایی بدون آن چک میکنید
چون سشن هایی که توسط www.site.com ذخیره میشن توسط site.com قابل خوندن نیستن (همچنین کوکی)

masoomenoroozi
دوشنبه 14 اسفند 1391, 13:58 عصر
شاید مثلا آدرس جایی رو که سشن ذخیره میشه با www وارد میکنید و جایی بدون آن چک میکنید
چون سشن هایی که توسط www.site.com ذخیره میشن توسط site.com قابل خوندن نیستن (همچنین کوکی)

تا جایی که من میدونم سشن یه متغیره که توش مقدار میریزیم مثل کد زیر:

$session['sum']=10;
wwwیعنی چی؟

codedme
دوشنبه 14 اسفند 1391, 14:04 عصر
بهترین کاری که من پیشنهاد می کنم به خودتون کمک میکنه این هست که مقداری از کدتون رو که نشون بده که کاری که انجام میشه چی هست و یا الگوریتم کاری که دارید انجام میدید رو به دوستان نشون بدید
و یا اینکه سعی کنید یک نسخه ی ساده از اون چیز بزرگی که روی سایت دارید رو یک بار دیگه پیاده کنید و اینجا روش بحث کنید

اگر نه فکر نمی کنم کسی بتونه چشم بسته به شما کمک بکنه

Yuness Mehdian
دوشنبه 14 اسفند 1391, 14:13 عصر
خطایی هم صادر میشه؟

masoomenoroozi
دوشنبه 14 اسفند 1391, 14:18 عصر
خطایی هم صادر میشه؟
نه فقط سشن توصفحه دیگه ای که می خوام چاپ بشه مقدار نداره

Yuness Mehdian
دوشنبه 14 اسفند 1391, 14:25 عصر
توصیه میکنم فایلهاتون رو بصورت UTF-8 without BOM ذخیره کنید ، و تست کنید چون در غیر این صورت session به درستی اجرا نمیشه و امکان داره سرور خطاها رو نشون نده

MMSHFE
دوشنبه 14 اسفند 1391, 14:27 عصر
دوست گرامی، سشن به اون شکلی که شما نوشتین درست نیست. این مثال رو ببینید:


session_start();
$_SESSION['user'] = 'ali';

دقت کنید که اسم آرایه SESSION_$ هست (دقیقاً به همین شکل با Underline و تماماً با حروف بزرگ)

AbiriAmir
دوشنبه 14 اسفند 1391, 15:16 عصر
www منظور آدرس سایتتون هست
مثلا دو آدرس زیر به سشن های هم دسترسی ندارن:


http://example.com
http://www.example.com


مثلا ممکنه هنگام مقدار دهی سشن شما آدرس سایت را با www وارد کرده باشید و صفحه ای که سشن در آن مقدار ندارد بدون www ( یا برعکس )

one hacker alone
دوشنبه 14 اسفند 1391, 21:37 عصر
سلام
احتمال زیاد شما کار با سشن ها رو کامل متوجه نشدین چون چیز خاصی نداره
نکته اول:
تابع session_satart() رو در خط اول در تمام صفحات بنویسید

نکته دوم:
نحوه بکارگیری متغییر های سشن رو دقت کنید
یکی از کدهای صفحه ای که سشن رو صفر نشون میده اینجا بزارید برای بررسی

masoomenoroozi
سه شنبه 15 اسفند 1391, 08:39 صبح
این نمونه کد بخش مهم کد که سشن مقدار گرفته و باید نمایش داده شود می باشد.
در صفحه reserv_room.php کد های زیر اجرا می شود ...


session_start();
....
<script src="fanction.js" type="text/javascript"></script>
......
نوع فولبرد :<select name="ty" id="ty" onchange="y()" >
<option value="0">منوی انتخابی</option>
<option value="1">منوی باز </option>
<option value="2">منوی بسته</option>
</select><br /><br />
<div id="bord" style=" width:530px; " >

</div>
با انتخاب هر یک از مقادیر منوی باز ...
تابع y() فراخوانی می شود از فایل function.js که به شرح زیر است..
function y()

{

if (window.XMLHttpRequest)

x=new XMLHttpRequest();

else if(window.ActiveXObject)

x=new ActiveXObject("Microsoft.XMLHTTP");

else

alert("Ajax No Support");



//alert(document.getElementById("slcg").value);

var url,j;

url="show_type.php";
var params="name="+(document.getElementById("ty").value)+'/'+(document.getElementById("w").value) +'/'+(document.getElementById("sdate").value)+'/'+(document.getElementById("edate").value);


x.open("post",url,true);

x.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

x.setRequestHeader("Content-length", params.length);

x.onreadystatechange =a;

x.send(params);

}

function a()

{



if (x.readyState==4)

{



document.getElementById("bord").innerHTML=x.responseText;



}


}
و توسط فایل ajax به صفحه show_type.php می رود
که متغیر session در این صفحه مقدار دهی می شود.
صفحه show_type.php
session_start();
$_SESSION['sum1']=10;
که در اینجا با توجه به تابع ajax a() در div با
id=bord مقدار سشن نمایش داده می شود
ولی در صفحه بعدی reserve_room.php که بعد از div مجددا سشن را فراخوانی کردم سشن مقدار ندارد.
echo $_SESSION['sum1'];

MMSHFE
سه شنبه 15 اسفند 1391, 09:08 صبح
خوب این کد که بنظر درست میاد. البته کد کامل فایل show_type.php و همچنین fanction.js رو هم باید ببینیم (البته دومی بعید میدونم ارتباطی داشته باشه) اما یک سؤال، چرا از jQuery برای AJAX استفاده نمیکنید؟

masoomenoroozi
سه شنبه 15 اسفند 1391, 09:28 صبح
این کد داره توی لوکال هاست درست جواب میده ولی نمیدونم چرا توی هاست اصلی درست کار نمیکنه. در حالی که تا چند روز پیش توی هاستم درست کار میکرد ممکنه اشکال توی تنظیمات هاست باشه ؟
البته با پشتیبانی سرور هاستمون هم تماس داشتیم که تمام تنظیمات رو گفتن درسته.

آیا فرق بین jqueryو javaتاثیری در مقدار دهی سشن داره؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟/

MMSHFE
سه شنبه 15 اسفند 1391, 09:33 صبح
نه jQuery رو بخاطر راحتی خودتون و تطابق با تمام مرورگرها گفتم. کل کدی که شما برای AJAX نوشتین رو با یک خط توی jQuery میشه نوشت.
اما درمورد مشکلی که گفتین، احتمال داره بخاطر این باشه که فایل شما UTF-8 without BOM نیست. با ++Notepad فایل رو باز کنید و از منوی Encoding گزینه Encode in UTF-8 without BOM رو انتخاب کنید و فایل رو ذخیره و دوباره آپلود کنید. ضمناً روی هاست بطور پیشفرض Output Buffering غیرفعاله. توی اولین خط کدتون دستور ;()obstart و توی آخرین خط دستور ;()ob_end_flush رو بنویسید. این کار رو برای تمام فایلها انجام بدین. دقت کنید که هربار فایلتون رو با ادیتور معمولی مثل Notepad ویندوز ویرایش و ذخیره کنید، دوباره BOM به فایل اضافه میشه و دچار همین مشکل خواهید شد. علت اینکه سشن توی همون صفحه کار میکنه و توی بقیه صفحات نه هم اینه که اصلاً ;()session_start نتونسته بخاطر وجود BOM (که دیگه اجازه نمیده هدرها تغییر کنن)، سشن رو شروع کنه و درنتیجه SESSION_$ که شما ساختین، یک آرایه معمولی توی همون صفحه شده نه آرایه اصلی سشن که SuperGlobal هست. امیدوارم خوب توضیح داده باشم. اینجا (http://barnamenevis.org/showthread.php?356992-%D9%BE%D8%B1%D8%B3%D8%B4%D9%87%D8%A7%DB%8C-%D8%AA%DA%A9%D8%B1%D8%A7%D8%B1%DB%8C&p=1576420&viewfull=1#post1576420) رو هم ببینید.

masoomenoroozi
سه شنبه 15 اسفند 1391, 09:38 صبح
ممنون از پیگیریتون
فقط یه سوال
اول obstart() رو بنویسم یا $_SESSION()?

MMSHFE
سه شنبه 15 اسفند 1391, 09:40 صبح
اولین خط ;()ob_start باید باشه و آخرین خط ;()ob_end_flush
ضمناً _ هم یادتون نره. جزو اسم توابع هست.

masoomenoroozi
سه شنبه 15 اسفند 1391, 09:44 صبح
یه زحمت براتون دارم
راستش من خیلی jquery بلد نیستم . ممکنه همین کدارو با jquery برام بنویسید؟


ممنون.................

MMSHFE
سه شنبه 15 اسفند 1391, 09:50 صبح
اول فایل فشرده jQuery (نسخه Minify شده) رو از سایت jQuery.com دانلود کنید و در کنار اسکریپت به اسم jqmin.js ذخیره کنید و بعد کد زیر رو اجرا کنید:


<script src="jqmin.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#ty").change(function() {
$.ajax({
type: "post",
url: "show_type.php",
data: "name="+$("#ty").val()+"/"+$("#w").val()+"/"+$("#sdate").val()+"/"+$("#edate").val(),
success: function(data) {
$("#bord").html(data);
}
});
});
});
</script>
نوع فولبرد :<select name="ty" id="ty" >
<option value="0">منوی انتخابی</option>
<option value="1">منوی باز </option>
<option value="2">منوی بسته</option>
</select>
<div id="bord" style=" width:530px; " >

البته من این کد رو برای راحتی در تفهیم، بصورت گسترده شده و با تفکیک پارامترها در سطرهای مختلف نوشتم وگرنه خیلی خلاصه تر هم میشه با post.$ نوشت. موفق باشید.

masoomenoroozi
سه شنبه 15 اسفند 1391, 10:11 صبح
ممنون از پاسخ هاتون

MMSHFE
سه شنبه 15 اسفند 1391, 10:25 صبح
خواهش میکنم. دکمه «تشکر کردن» برای اینجور وقتها درنظر گرفته شده. ضمناً اگه مشکلتون رفع شد، خبر بدین تا بقیه دوستان هم مطلع بشن. موفق باشید.

masoomenoroozi
سه شنبه 15 اسفند 1391, 10:54 صبح
بله . ولی با همه این شرایط باز هم سشن خالی مونده و مقدار نداره

واقعا دیگه نمیدونم چیکار کنم. آخه همه کارهایی رو که گفتین انجام دادم

MMSHFE
سه شنبه 15 اسفند 1391, 10:56 صبح
اگه ممکنه TeamViewer نصب کنید و نام کاربری و رمز عبور رو برام پیام خصوصی کنید تا از نزدیک ببینم مشکل چیه.
-----
پاورقی: جدیداً به این نتیجه رسیدم که برخی مشکلات رو فقط میشه با Remote Connection رفع کرد و توضیح دادن جوابگو نیست و این مسئله کاملاً طبیعیه چون تا وقتی افراد در عمل نحوه رفع مشکل رو حداقل یکبار نبیین، توضیح فایده نداره.

رضا قربانی
سه شنبه 15 اسفند 1391, 11:01 صبح
این کد داره توی لوکال هاست درست جواب میده ولی نمیدونم چرا توی هاست اصلی درست کار نمیکنه. در حالی که تا چند روز پیش توی هاستم درست کار میکرد ممکنه اشکال توی تنظیمات هاست باشه ؟
البته با پشتیبانی سرور هاستمون هم تماس داشتیم که تمام تنظیمات رو گفتن درسته.

آیا فرق بین jqueryو javaتاثیری در مقدار دهی سشن داره؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟/
http://barnamenevis.org/showthread.php?368272-%DB%8C%DA%A9-%D9%86%DA%A9%D8%AA%D9%87-%D9%85%D9%87%D9%85-%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-session یه دید بزن شاید مشکلت این باشه

MMSHFE
سه شنبه 15 اسفند 1391, 12:38 عصر
دوستان مشکل این دوستمون حل شد. برای حل مشکل مشابه سایر دوستان، علت رو اینجا میگم:
اگه توی یک فایل، فایل دیگری رو include یا require کردین، حتماً باید اون فایل هم UTF-8 without BOM باشه و درصورت لزوم، ob_start رو اول و ob_end_flush رو آخر اون فایل هم صدا بزنید.
بطور کلی عادت کنید حتماً تمام فایلهای شما UTF-8 without BOM باشن.
ضمناً اگه یک فایل PHP دارین که ابتداش با تگ PHP شروع نشده و اولش HTML دارین، حتماً قبل از اون کدهای HTML تگ PHP رو باز کنید و ob_start رو صدا بزنید، نه اینکه در اولین جایی که تگ PHP باز شد، اینکار رو انجام بدین چون وجود کدهای HTML قبل از کدهای PHP هم باعث میشه مثل BOM، محتوای اونها برای مرورگر کلاینت ارسال بشه. بطور مشابه، ob_end_flush هم باید آخرین دستور فایل باشه و اگه انتهای فایلتون تگ PHP نیست باید بازش کنید و اونجا بنویسید. بطور خلاصه:
ob_start دقیقاً اولین خط فایل باشه و ob_end_flush هم دقیقاً آخرین خط یعنی تمام فایلهای PHP شما باید اینطوری باشه:


<?php
ob_start();
// the rest of file contents
ob_end_flush();
?>