在页面中丢失$ _SESSION变量

时间:2015-03-27 08:25:53

标签: php session

我非常沮丧地来找你。我花了几天时间查看我的代码和整个StackOverflow问题,寻找以下问题:

我的项目的功能是使用三页登录。 第一页 1.php包含要填写的输入字段:

<?php
session_start();
session_destroy();

require_once "init.php";
require "header.php";

?>

<form method="POST" action="2.php" enctype="multipart/form-data">
  <table>
     <tr><td>Username</td></tr>
     <tr><td><input type="text" id="user" name="user" value=""/></td></tr>
     <tr><td>Password</td></tr>
     <tr><td><input type="password" id="pass" name="pass" value=""/></td></tr>
     <tr><td><input type="submit" value="Get in"/></td></tr>
  </table>
</form>

第二页 2.php处理信息,检查用户和密码是否正确,并初始化$_SESSION['user'];

<?php
session_start();
session_save_path('/server/path/system/sphp');
//had to change dir due to server restrictions

$username= $_POST['user'];
$user= "cpe12";
$userpass= $_POST['pass'];
$pass= "p2010";

    if($username==$user&&$userpass==$pass){

    $_SESSION['user']= $username;
    echo "<head><meta http-equiv='refresh' content='2; url=3.php'>Loging </head>";
    echo $_SESSION['user'];
    exit();
    }
       elseif ($username!=$user||$userpass!=$pass){
            session_destroy();    
            echo "<head><meta http-equiv='refresh' content='2; url=1.php'>Wrong log in</head>";
            exit();

            } 

?>

我使用3.php功能保护 第三页 isset内容。

<?php
session_start();
session_save_path('/server/path/system/sphp');
//I know I could use an include_once instead of these two lines, right?

        error_reporting(E_ALL);
        ini_set('display_errors', 1);

        if (isset($_SESSION['user'])){

             $title= "Copies";
             require "header.php";
             require "content.php";

          }
                else{
                    session_destroy();
                    echo "<head><meta http-equiv='refresh' content='4; url=index.php'>Blocked content.</head>";
                    die();

                }
?>

每当我尝试登录时,它都会在2.php中验证确定,但是当它到达3.php时,它无法登录。所有页面都将session_start和session.save_path写为前两行,没有空格。 我已将/tmp的默认文件夹session.save_path更改为server/path,因为/tmp没有写入权限。

我可以从2.php检索一些信息,看起来$_SESSION['user']可以正常显示,但3.php从不读取它。问题是我在这个会话下还有另外6个页面可供访问,所以我需要一个全局解决方案。

哦,这很令人困惑:我还创建了一个文件,以便使用以下代码检查名为check.php的会话信息(仅供参考):

<?php

   session_start();
   session_save_path('/server/path/system/sphp');

   echo session_save_path().'<br/>';
   echo $_SESSION['user'].'<br/>';
   echo session_name();

   if (!is_writable(session_save_path())) {
    echo 'Session path "'.session_save_path().'" is not writable for PHP!'; 
   }

   ?>

现在,如果我首先清除浏览器历史记录和数据,然后在网址中输入www.myweb.com/check.php,我会看到缺少的信息,因为$_SESSION['user']等尚未创建。如果之后我尝试登录,无论如何都会惊奇地开始像魅力一样登录。首先,我必须在我的浏览器上访问check.php才能登录。但是如果我再次清除浏览器历史记录和数据,它就不会让我再登录。

3.php上的error_reporting指出: Notice: Undefined index: user in "/server/path/system/3.php in line 34

这可能与我的服务器有关吗?关于save_handlers的事情? 这是我的第一次登录,我经历了地狱。我认为这将是一个很长的路要走。 我没有更多选择或知识可供申请。你是我最后的选择。

谢谢你们!

2 个答案:

答案 0 :(得分:2)

需要在 session_start()之前调用

session_save_path()

参考: http://php.net/manual/en/function.session-save-path.php

所以

session_save_path('/server/path/system/sphp');
session_start();

答案 1 :(得分:0)

这在我以前从未发生过。我从2.php复制了代码并将其粘贴到另一个文件中,该文件名为try.php(完全相同的代码)。我重定向1.php以检入try.php然后重定向到3.php。有效。 现在,通过将完全相同的代码复制到另一个文件(我逐字逐行检查),我得不到可以解决的问题,所以我很困惑。 但是,现在就像魅力一样。