这是我的PHP会话的问题吗?
我正在使用会话将用户登录到我的站点 登录表单将输入发送到login exec文件,该文件随后查询数据库并验证登录信息。我已经放置了这是我的PHP会话的问题吗?,php,session,session-variables,sessionid,Php,Session,Session Variables,Sessionid,我正在使用会话将用户登录到我的站点 登录表单将输入发送到login exec文件,该文件随后查询数据库并验证登录信息。我已经放置了会话_start()在登录exec文件的开头,然后使用以下代码段将数据写入会话: session_regenerate_id(); $member = mysql_fetch_assoc($result); $_SESSION['SESS_MEMBER_ID'] = $member['id']; $_SESSION['Username'] = $member['use
会话_start()
在登录exec文件的开头,然后使用以下代码段将数据写入会话:
session_regenerate_id();
$member = mysql_fetch_assoc($result);
$_SESSION['SESS_MEMBER_ID'] = $member['id'];
$_SESSION['Username'] = $member['username'];
$_SESSION['key'] = $member['Serial'];
session_write_close();
header('Location: account.php');
在account.php文件的开头,我要求auth.php验证会话
account.php:require_once('auth.php')代码>
auth.php:
<?php
//Start session
session_start();
//Check whether the session variable SESS_MEMBER_ID is present or not
if(!isset($_SESSION['SESS_MEMBER_ID']) || (trim($_SESSION['SESS_MEMBER_ID']) == '')) {
header("Refresh: 5; url=login.php");
//echo $_SESSION['SESS_MEMBER_ID'];
die("Access Denied!");
exit();
}
?>
总是在第一次登录时返回拒绝访问。当脚本重定向回登录页面,我再试一次时,它总是有效的。。。我已经将我的php文件保存在UTF-8中,没有BOM,因为我最初认为在会话开始之前有前导空格。这并没有解决问题,我真的不明白这一点
关于为什么会发生这种情况,你有什么想法吗?摆脱这个会话&u write\u close()
如果这不能解决问题,那么可能是account.php文件中的会话丢失了
调用session_start()
在需要auth.php页面之前。我认为问题在于login-exec.php脚本中的重定向url。例如:
如果我通过转到加载login.php脚本,并且login-exec.php中的头重定向指向PHPSESSID,则会因为域更改而重新生成PHPSESSID
因此,我将标题重定向改为account.php,而不是完整的url,这就解决了问题
我可以使用subdomain.mydomain.com或mydomain.com/subdirectory/的完整URL,但这样做会限制用户和脚本的可移植性。答案很简单。确保域保持不变。如果不是,您可以设置会话名称,我很确定这也会解决这个问题。但是在我的例子中,header('Location:script.php')代码>成功了 它可能与会话_write_close()有关;呼叫我对这些代码片段的执行顺序感到困惑。我将删除会话\u write\u close()
调用。我删除了会话\u write\u close(),同样的结果也在发生。事件触发的顺序如下所述:Login将数据发布到Login-exec.php,Login-exec.php将验证信息写入会话,然后Login-exec.php将用户转发到account.php。在account.php中,我要求auth.php检查SESS_MEMBER_ID是否已设置。是auth.php第一次抛出了这个问题,但之后只要我不清除缓存,它就可以在任何时候工作。这可能是因为我调用了session_regenate_id();在将会话变量存储到login exec.php中之前?完成了,结果是一样的。@Drew:为什么在这个脚本中调用session_regenate_ID()?顺便说一句,这个建议并没有解决问题,这不是-1。。。这只是意味着还有更多的问题需要解决。我没有投你反对票……一定是其他人投了反对票。“我已经尝试删除会话\u REGENATE\u ID(),但仍然不起作用。”Drew Ok。您是否在设置完$\u会话变量后,为了确保它被正确填充而尝试打印它?是的,我打印了它并设置了它。但不会转移到其他页面。