【发布时间】:2011-03-18 11:29:35
【问题描述】:
我目前正在构建一个 CMS,但我遇到了 PHP 会话问题:
- 我网站上的任何地方用户都可以通过向 URL 添加查询字符串来启动 CMS -> ?mod=admin
- ?mod=admin 将重定向到 login.php
- 身份验证后,我想将用户重定向到他来自启用 CMS 功能的页面
为此,我在用户访问 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');
【问题讨论】:
-
什么是行'$_SESSION['username'];'应该怎么做?
-
如果 $_SESSION['username'] 存在,那么我知道用户已登录
-
在这种情况下,您必须在标题周围放置
if (isset($_SESSION['username'])){ }而不是该行。但是,如果 url 正确并且您在 header 语句之前没有输出任何 html,则重定向应该可以工作。 -
你知道你必须在函数 curPageURL 中使用 session_start() 吗?
-
在 if($num_rows == 1){} 之前我进行了登录验证。我检查 $_POST['username'] & $_POST['password'] = MySQL 条目)。如果它返回一行,那么我通过在页面上启动会话来记录我的用户,他们将被重定向-> session_start(); $_SESSION['用户名'];
标签: php session redirect header