下面的代码会保留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变量也被重置了?
答案 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")
时为会话命名,但是如果访问者最近访问过并且会话未被销毁,则他们可能会看到解析错误(如果已启用它们)。