我目前正在构建CMS,我遇到了PHP会话的问题:
为此我在用户转到login.php之前将当前页面url存储在会话中
url.class.php脚本
function curPageURL() {
session_start();
$pageURL = 'http';
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["PHP_SELF"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["PHP_SELF"];
}
$_SESSION['url'] = $pageURL;
}
Login.php脚本: 如果验证成功,我开始一个会话并尝试将用户重定向到他来自的页面:
if($num_rows == 1){
session_start();
$_SESSION['username'];
header('Location: ' . $_SESSION['url']);
}
我收到“会话已经开始”错误 但是,如果我重定向到特定页面(例如主页),那么一切正常。 例如 - > header('Location:index.php');
答案 0 :(得分:1)
你能不能只使用$ _SERVER ['HTTP_REFERER']重定向到上一页?
当您尝试以当前状态运行脚本时实际发生了什么?
答案 1 :(得分:1)
如果那是你得到的错误,那么你需要检查你是否已经在其他地方启动了会话。在这种情况下,你需要把:
if(!isset($_SESSION)){
session_start();
}
代替您放置正常session_start()的位置。
答案 2 :(得分:0)
在url.class.php中,你已经开始了会话吗?您的问题可能是您尚未启动会话,因此无法存储会话数据。
在你的url.class.php中,尝试检查会话变量是否包含你想要的值。
答案 3 :(得分:0)
我网站上的任何地方用户都可以启动CMS
我认为您的意思是该网站是通过CMS实现的,并且用户可以通过附加到查询字符串来获得对任何阶段的提升权限/附加功能的访问权。
在会话中存储当前页面网址
的Erk。
这不是存储此信息的正确位置 - 它应该通过URL传递(或通过POST传递 - 但这不会在重定向中起作用):
session_start();
if (!is_auth_for_cms() && $_GET['mod']=='admin') {
// simplified a bit...
$comeback='http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
// rewriting the get trigger avoids short circuit looping problems
$comeback=urlencode(str_replace('mod=admin', 'mod=auth', $comeback));
header("Location: " 'http://' . $_SERVER['HTTP_HOST'] . "/login.php?backto=$comeback";
}
暂不考虑代码中的拼写错误,问题是什么?
if($num_rows == 1){
session_start();
$_SESSION['username'];
header('Location: ' . $_SESSION['url']);
}
您认为第三行有什么作用?