$ _SESSION ['user']无效

时间:2011-06-09 22:43:49

标签: php session-variables

这是记录的代码,以及我设置的东西

<?php 
    session_start();
    $_SESSION['user'] = "kjkj";
    $_SESSION['pass'] = "";  
    $error = $user = $pass = "";

    if (isset($_POST['user'])) {
        $user = sanitizeString($_POST['user']);
        $pass = sanitizeString($_POST['pass']);

     if ($user == "" || $pass == "") {
            $error = "Not all fields were entered<br />";
     } else {
            $query = "SELECT store,c_pass FROM store
                    WHERE store='$user' AND c_pass='$pass'";

            if (mysql_num_rows(queryMysql($query)) == 0) {
                $error = "Username/Password invalid<br />";
            } else {
            $_SESSION['user'] = $user;
                $_SESSION['pass'] = $pass;
            $str = $_SESSION['user'] . ", You are now logged in. Please 
                       <a href='scheduler.php'>click here</a>.";

                die($str);
            }
        }
    } ?>

它会在查询后打印正确的商店名称等等。但是当我尝试在像这样的另一个php文件中使用它时

if (!isset($_SESSION['user']) ) {
    die("<p><h1>Please Login</h1></p>");
} else {
    echo "<p><form id ='addemp' method=\"post\" action=\"addUser.php\">
          Name<input type=\"text\" name=\"emp\" />
      \"". $_SESSION['user'] . "\">
      <input type=\"submit\" value=\"AddUser\" />
    </form></p>";
}

这是一个空字符串。不为空字符串。我尝试了所有可以在互联网上找到的解决方案,但都没有。我想出为什么这不起作用。 非常感谢任何帮助,谢谢。

6 个答案:

答案 0 :(得分:2)

这可能是一些事情。首先,会话在其他任何时间都有效吗? 我认为您没有提供足够的信息来帮助您。设置apache / php不仅仅是你的代码,这可能是一个问题。在我使用WAMP在Windows上开发并且临时文件夹没有正确权限之前发生过我。正如我所说,可能会有许多问题导致你的会话行为不端。

  • 当你做一个计数器并刷新时 页面是否保留了一个数字?
  • 在 每次使用您需要的会话时,开始 调用session_start()方法。 重要事项:之前不能有任何回声或打印等 在session_start()。
  • var_dump($user)放在$_SESSION['user'] = $user;之前,并在保存之前检查$ user的内容。可能是您的消毒功能无法正常工作。也可以在第一个脚本的末尾查看$_SESSION的内容,以确保正确保存变量。

答案 1 :(得分:1)

在使用session_start()之前,您需要致电$_SESSION。另请注意,在会话中保留密码是一种非常糟糕的做法,也是一个很大的安全漏洞。

答案 2 :(得分:0)

如果您声称在该页面中也插入了session_start(),请执行以下两项操作:

1)更正你的html,这一行。

echo "<p><form id ='addemp' method=\"post\" action=\"addUser.php\">
          Name<input type=\"text\" name=\"emp\" />
      \"". $_SESSION['user'] . "\">

有些事情不是很清楚。你在哪里回应你的$ _SESSION?你的浏览器可能无法呈现它吗?你想要完成什么?可能是浏览器正在解释关闭标记>的错误。首先尝试整理html。 如果这是输入字段值,请写

Name <input type=\"text\" name=\"emp\" value=\"".$_SESSION['user']."\"/>

2)var_dump $ _SESSION ['user']看看它是否真的是一个空字符串。

if (!isset($_SESSION['user']) ) {
    die("<p><h1>Please Login</h1></p>");
} else {
    var_dump($_SESSION['user']);
}

答案 3 :(得分:0)

听起来OP与register_globals存在问题。

在php.ini中设置register_globals = Off,然后再次尝试代码。

我遇到了完全相同的问题 - 我在会话中有一个用户变量,然后设置$user = array();并发现$user变量覆盖了$_SESSION['user']变量。禁用register_globals修复它。

或者您可以将$ user变量更改为$ myUser,但最好还是禁用register_globals。

答案 4 :(得分:0)

基于@kpaulsen回答,

我对他有同样的情况,$变量覆盖了$ _SESSION ['变量']所以我按照他的建议但是它对我不起作用然后我找到另一种设置register_globals = Off的方法

在.htaccess

上添加此行
php_flag register_globals off

答案 5 :(得分:0)

也许这是我前段时间的一个问题,完美地完成了所有代码,但忘了在连接脚本中插入session_start();,接收登录$_POST['somevariable']以验证数据库

在恢复时,不要忘记在你的连接上开始一个会话。