【问题标题】:Setting php sessions设置 php 会话
【发布时间】:2016-07-14 08:34:05
【问题描述】:

我不明白为什么没有设置这些会话。我的代码似乎与所有教程相同 - 以及堆栈溢出问题 - 但它不会设置会话。如果我哪里出错了,请告诉我。

以下是基础知识:我有一个 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"; 页面,并收到错误消息,指出会话未设置。

【问题讨论】:

  • 您不能在代码中间开始会话。您必须在页面顶部定义它。
  • 没必要。会话必须在您向客户端发送内容之前启动,但不需要在文件开头启动它。
  • 我只是更改了代码,会话开始仍在中间,代码可以工作,所以我认为它也不需要在页面顶部。
  • 尝试用isset($_SESSION['signUp'])替换empty($_SESSION['signUp'])

标签: php session


【解决方案1】:

您好,您尚未为您的 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>';
}

同时在页面顶部开始查看

【讨论】:

  • 谢谢。这可能在某个地方的教程中,但我一定错过了。
【解决方案2】:

您需要为$_SESSION['signUp'] 设置一个值,可能类似于$_SESSION['signUp'] = true;

【讨论】:

  • 第二部分正确,但第一部分(页面顶部)不正确
【解决方案3】:

您可以将empty 替换为isset

【讨论】:

    猜你喜欢
    • 2013-05-13
    • 1970-01-01
    • 2013-10-18
    • 2015-01-14
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    相关资源
    最近更新 更多