2016-07-13 122 views
0

我不明白为什么这些会话没有被设置。我的代码似乎与所有教程相同 - 并且堆栈溢出问题 - 但它不会设置会话。请告诉我,我是否在某处出错。设置php会话

以下是基本知识:我有一个hmtl页面,其中包含一个向数据库添加电子邮件地址和密码的表单。插入到数据库之后,我试图启动一个会话,然后将用户重定向到一个新页面并检查会话是否已设置。如果没有会话,用户将从受保护的页面重定向。

这是一个运行在数据库插入并应该设置会话的代码,但并不:

<?php 
// connect to db manager 
$link = mysql_connect("localhost", "root", ""); 
if (!$link) {die('Database Error: Could not connect: ' . mysql_error());} 

// select db 
$db_selected = mysql_select_db('foo', $link); 
if (!$db_selected) { 
die ('Can\'t use foo : ' . mysql_error()); 
} 

// username and password sent from form 
$em = mysql_real_escape_string($_POST['email']); 
$pw = mysql_real_escape_string($_POST['password']); 

// MySQL Insert Statement 
$insert = "INSERT INTO users (`email`, `password`) VALUES ('$em',AES_ENCRYPT('$pw','SecretKey'))"; 

// Perform Query 
$execute = mysql_query($insert); 

// if inserted, start session + variable, then redirect 
if ($execute) { 
session_start(); 
$_SESSION["signUp"]; 
echo '<script type="text/javascript">'; 
echo 'document.location.href = "../u/user.php";'; 
echo '</script>'; 
} 
else{ 
    $message = 'Invalid query: ' . mysql_error() . "\n"; 
    $message .= 'Whole query: ' . $query; 
    die($message); 
} 

mysql_close($link); 
?> 

这是在保护页面顶部的代码:

<?php 
session_start(); 
if (empty($_SESSION['signUp'])){ 
    echo "Session not set!"; 
    // header("location:../index.php"); 
} 
?> 

我已将重定向注释掉,以便我可以测试会话是否正在设置。每次我运行表单时,我都会重定向到../u/user.php“页面,并且我收到错误消息说会话没有设置。

+0

您无法在代码中间启动会话。你必须在页面顶部定义它。 –

+0

这没有必要。会话必须在向客户端发送内容之前启动,但不需要在文件开始时启动它。 – Arnial

+0

我刚刚更改了代码,会话的开始仍然在中间,代码正常工作,所以我不认为它需要位于页面的顶部。 – tdrsam

回答

3

嗨,您尚未赋予您的任何价值session

if ($execute) { 
session_start(); 
$_SESSION["signUp"];// where is the value for this ???? 
// $_SESSION["signUp"] = true; or whatever you want 

echo '<script type="text/javascript">'; 
echo 'document.location.href = "../u/user.php";'; 
echo '</script>'; 
} 

此外,在您的网页

+0

谢谢。这可能在教程中的某处,但我一定错过了它。 – tdrsam

2

的顶部开始SEESION您需要将值设置为$_SESSION['signUp']可能像$_SESSION['signUp'] = true;

+0

第二部分是正确的,但第一部分(页面顶部)不正确 – tdrsam

+0

谢谢我编辑了答案 –

0

你可以重新将empty设置为isset