提交表单后,php会话丢失了

时间:2013-02-19 22:04:15

标签: php session session-variables

下面的代码会保留GET请求或刷新浏览器的会话,但是当我提交表单时,会话数据会丢失。

$user=$_POST['user']; $pass=$_POST['pass'];
if ($_POST['user'])
{ if($user==$un and $pass=$pw)
  { $_SESSION['uid']=$Xid;header('Location: '.$uri.'?welcome'); }
  else { $msg="chybny login";  }
}

if(isset($_GET['logout']))   { session_destroy(); header('Location: '.$uri); }
$cnt=$_SESSION['cnt']+1; $_SESSION['cnt']=$cnt;

以上是登录代码,在验证后将其重定向到欢迎页面,但会话丢失。如果我只是刷新或重复加载页面而不提交,则会话通过回显会话变量cnt来保持(计数1,2,3,...)

提交表单后,我看到会话丢失了,cnt变量也被重置了?

5 个答案:

答案 0 :(得分:0)

我通常不会在会话中直接尝试以下操作,将其放在脚本的顶部:

session_start();
$uid = $_SESSION['uid'];
$cnt = $_SESSION['cnt'];

然后使用变量

答案 1 :(得分:0)

问题可能是你的'和'声明。它应该是&&。条件不是真的。

答案 2 :(得分:0)

如果您100%确定代码完好无损且PHP.ini是问题,请根据您的上述评论。请查看此链接,检查.ini http://php.net/manual/en/session.configuration.php

中的设置

答案 3 :(得分:0)

首先,请确保您在每个页面上执行的第一件事就是启动会话(我建议您在所有子站点上需要的头文件中调用一次)。

这样你就有了session_start();在系统的任何地方。

其次,收紧你的代码;让它更容易阅读。像

这样的东西
$userName = isset($_POST['userName']) ? $_POST['userName'] : false;
$password = isset($_POST['password']) ? $_POST['password'] : false;
$logout = isset($_POST['logout']) ? $_POST['logout'] : false;

$url = '../index.php';

if(!($logout))
{
    if($userName && $password)
    {
        if($userName == $un && $password == $pw)
        {
            $_SESSION['loggedIn']=true;
            $_SESSION['uid']=$Xid;
            $_SESSION['message']="success";
        }
        else
        {
            $_SESSION['loggedIn']=false;
            $_SESSION['message']="fail, incorrect login information.";
        }
    }
    else
    {
        $_SESSION['loggedIn']=false;
        $_SESSION['message']="fail ; username and password not submitted.";
    }
    header("Location: $url");

}
else
{
    session_start();
    session_destroy();
    session_start();
    header("Location: $url");
}

如果您想根据用户是否登录显示unqiue内容,那么您只需在每个页面上检查是否设置了登录会话,而不是为此修改标题。

答案 4 :(得分:0)

将当前会话传递到下一页......我相信你所要求的......

您目前没有将会话传递到下一页,并使用下一页顶部的session_start()

将第4行更改为:

{ $_SESSION['uid']=$Xid;header('Location: '.$uri.'?'.SID.'&page=welcome'); } // Where "page" is the name of the data you are retrieving

或者,您可以将会话数据保存到cookie中,然后在下一页上检索它。

您可以在每个页面上使用session_start("NameHere")时为会话命名,但是如果访问者最近访问过并且会话未被销毁,则他们可能会看到解析错误(如果已启用它们)。