مشکل در رابطه با session ها

masima

Member
سلام در رابطه با کار با session دچار مشکل اساسی شدم. که قبلا این طور نبوده (در گذشته).
مشکل اینه که نمیتونم متغیر ها رو از درون یک session ایجاد شده بخونم. متغیر ایجاد میشه و مقدار دهی هم میشه ولی نمیشه خوندش.
برنامه بسیار ساده زیر را در نظر بگیرید :

در فایل page1.php داریم

PHP:
<?php session_start(); 
$_SESSION[name]="masima";
header('location: page2.php');
?>
و در فایل page2.php داریم
PHP:
<?php
echo "your name is: ";
echo $_SESSION[name];

?>
که session ساخته میشه و متغیر name در آن مقدار masima را میگیرد ولی هرگز آن را نمایش نمیدهد. حتی اگر از آن var_dump بگیرم به صورت زیر، مقدار NULL را نمایش میدهد.

PHP:
var_dump($_SESSION[name]);

در ضمن این را بگویم که چه اینکه تمام کدهای html را در صفحات پاک کنم و چه اینکه کدهای php را در بالای آنها بنویسم فرقی نمیکند.
مشکل کار کجاست ؟ اگر کسی میتونه راهنماییشو دریغ نکنه!

یک نکته دیگر را بگم واینکه برنامه ای که در قسمت مقالات هست ( آموزش قدم به قدم ساخت لاگین )
در این برنامه اصلا متغیری در session ایجاد نمیکند و خطای زیر را میدهد
connect.phpWarning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at D:\xampp\htdocs\wwwphp\loginSample\index.php:*) in D:\xampp\htdocs\wwwphp\loginSample\config.php on line
شماره خط خطاها مربوط به فایل config.php و شروع session_start است.
 

shnoit

Well-Known Member
دوست عزیز نمیدونم درست متوجه شدم یا نه
شما باید اول سیشن رو چک کنید بعد فراخوانی کنید.

به این نمونه دقت کنید. ( قبلا در انجمن اموزش داده شده بود.)

صفحه index
PHP:
<?php
session_start();
if ( isset($_POST['userName']) && isset($_POST['passWord']) )
{
	include "../includes/config.php";
	$Query = mysql_query("SELECT * FROM `users` WHERE `username` = '".$_POST['userName']."' AND `password` = '".md5($_POST['passWord'])."' LIMIT 1");
	if ( mysql_num_rows($Query) > 0 )
	{
		$Admin = mysql_fetch_array($Query);
		if ( ($_POST['userName'] == $Admin['username']) && (md5($_POST['passWord']) == $Admin['password']) )
		{
			$_SESSION['userName'] = $_POST['userName'];
			header ("Location: addNews.php");
		}
	}
	else
	{
		$error = true;
	}
}
?>
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta name="Author" content="Amir Jafari <[email protected]>">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title> News Management : Admin Login </title>
<style type="text/css">
<!--
.style2 {font-size: 8pt}
p            { font-family: Tahoma; font-size: 10pt }
-->
</style>
</head>
<body bgcolor="#3F3F3F">
<form action="" method="POST" >
  <div align="center">
  &nbsp;<p>&nbsp;</p>
  <table width="391" border="0" id="main" cellspacing="0" cellpadding="0">
    <tr>
      <td height="29">&nbsp;</td>
    </tr>
    <tr>
      <td><div align="center"></div></td>
    </tr>
    <tr>
      <td width="391" height="271" background="images/login-page-cmsnewsportal.GIF">
		<table cellpadding="0" cellspacing="0" width="387" height="218">
			<!-- MSTableType="layout" -->
			<tr>
				<td colspan="2">
				<!-- MSCellType="empty" -->
				&nbsp;</td>
				<td height="60">
				<!-- MSCellType="empty" -->
				&nbsp;</td>
			</tr>
			<tr>
				<td>
				<p align="center"><label>
        <input name="userName" class="box" id="userName" size="28" style="float: right">
      </label></td>
				<td valign="top">
				<p align="left"><span lang="fa">:نام کاربری</span></td>
				<td height="28">
				<!-- MSCellType="empty" -->
				&nbsp;</td>
			</tr>
			<tr>
				<td>
				<p align="center"><label>
        <input name="passWord" type="password" class="box" id="passWord" size="28" style="float: right">
      </label></td>
				<td>
				<p align="left"><span lang="fa">:رمز عبور</span></td>
				<td height="32">
				<!-- MSCellType="empty" -->
				&nbsp;</td>
			</tr>
			<tr>
				<td width="236">
				<p align="right">
        <label>
        <input name="button" type="submit" class="btn" id="button" value="ورود">
        </label>
      			</td>
				<td width="96" valign="middle">
				<p align="center">&nbsp;</td>
				<td height="38">
				<!-- MSCellType="empty" -->
				&nbsp;</td>
			</tr>
			<tr>
				<td colspan="2" valign="top">
				<p align="center">&nbsp;<?php echo $error ? 'مشکلي در ورود به مديريت وجود دارد': ''; ?></td>
				<td height="60" width="55">
				<!-- MSCellType="empty" -->
				&nbsp;</td>
			</tr>
		</table>
		</td>
    </tr>
    <tr>
      <td height="14" class="newsbody"><div align="center"><span class="style2">
		Power by <a href="programin.php">NewsPortal Ma</a></span></div></td>
    </tr>
  </table>
  </div>
  <p align="center">&nbsp;</p>
</form>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</body>
</html>

صفحه بعدی

PHP:
<?php
session_start();
if ( isset($_SESSION['userName']) ) {
if ( (isset($_GET['act'])) && ($_GET['act'] == "logOut") )
{
	unset ($_SESSION['userName']);
	header ("Location: index.php");
}
include "../includes/config.php";
include "../includes/jdate.php";
?>

امیدوارم بدرد بخوره :rose:
 

Masoud1365

مدیر انجمن
توی صفحه دومتون هم باید از session_start(); استفاده کنید !
کلا هر جایی که با سشن کار دارید باید اول session_start(); رو بنویسید بعدش سشن رو چک کنید !
 

masima

Member
با تشکر از هر دو عزیز.
همونجور که اشاره کردین من کد session_start() رو در بالای هر دو صفحه نوشتم و دوم اینکه پیش از خوندن از session اون را چک کردم و مشکل حل شد.
ولی من نمیتونم از کدی استفاده کنم که کد sesssion_start() رو در خودش داشته باشه و هر وقت در هر صفحه ای به session ها نیاز داشته باشم اون صفحه را در بالای کدهام include یا require کنم.
کاری که خیلی از کدنویس ها انجام میدن؟ (مثل همون آموزش ساخت لاگین که توی پست 1 لینکش گذاشتم) مشکل کجاست؟
اگه کسی میدونه راهنماییم کنه. با تشکر
 

mohsen162

Member
دوست عزیز من هم به مشکل برخورده بودم
ببین اگه توی همه صفحه هات هدر داری و توی هدر session_start(); کردی دیگه توی اون صفحه اصلی که هدر در آن قرار داره session_start(); نکن
دوم
کد:
[COLOR=#000000][COLOR=#0000BB]$_SESSION[/COLOR][COLOR=#007700][[/COLOR][COLOR=#0000BB]name[/COLOR][COLOR=#007700]];[/COLOR][/COLOR]
باید به این صورت باشه
کد:
[COLOR=#000000][COLOR=#0000BB]$_SESSION[/COLOR][COLOR=#007700]['[/COLOR][COLOR=#0000BB]name'[/COLOR][COLOR=#007700]];[/COLOR][/COLOR]
امیدوارم مشکلت حل بشه
 

masima

Member
مشکل حل شد!!
دلیلش واقع خیلی عجیبه. مشکل توی encoding صفحه config.php (برنامه ساخت لاگین) بود یعنی من اونو utf-8 گذاشته بودم و گزینه include unicode signature را تیک زده بودم . تغییرش دادم به western و چند تا مورد عجیب! مثلا اینکه بعد تمام شدن کدها همه new line ها را پاک کنم.

در ضمن همونجور که گفتید متغیر session رو داخل تک کوتیشین گذاشتم.
ولی مطلبی که در مورد هدر نوشتید را زیاد متوجه نشدم! به هر حال ممنون. دیگه مشکلی نیست
 

barandata

Member
سلام به دوستان
یه مشکل فوری فوری
من یه وب سایت طراحی کردم 3ماه هم هست داره کار می کنه حداقل روزی هم 50 نفر پبت نامی داره
حالا بعد از 3 ماه با مشکل session برخورد کردیم.
یعنی sessionدر هیچ قسمتی از سایت start نمیشه و یه جاهایی مقادیر رو به session دادم ولی خالی ارسال میشه چون session_start کار نمی کنه قبل از استفاده از session هم چک میشن ولی چیزی وجود نداره اگر کسی پیشنهادی داره تو رو خدا زودتر بگه:-? :shock:
 

Masoud1365

مدیر انجمن
یعنی شما هیچ تغییری در کدهاتون ندادید ؟
( احتمالا سرور رو دست کاری نکردید ؟ )
 

Masoud1365

مدیر انجمن
سرورتون رو هم تغیر ندادن ؟
با پشتیبان هاستتون تماس بگیرید !
( البته قبلش توی یک صفحه ساده از سشن استفاده کنید ببینید سشن کلا کار میکنه یا نه ؟ )
 

barandata

Member
با هاست صحبت کردم میگن داریم چک می کنیم ولی چیزی پیدا نمی کنیم زیر بار نمیرن میگن هاستهای دیگه روی این سرور فعاله
 

M_cover

Member
3 تا احتمال وجود دارد:
session_start وجود ندارد
سشن ها را با session_id را چک کن ببین اجرا می شوند یا سشن آی دی ها را نسبت به سشن ها بررسی کن اینجا بزار!
session_regenerate_id دستکاری کردی!
یا سرور میزبانت عوض شده و سشن ها دیگر وجود ندارد
این هم می تونی با همین session_id چک کنی اگر وجود نداشت مطمئن باش مشکل از میزبانت است

موفق
 

جدیدترین ارسال ها

بالا