PHP会话:解释请吗?
我现在一直在学习PHP,大部分时间它一直很容易。 我唯一挂的就是让会议开始工作。 谷歌在这一努力中一直没有宽容。
这可能是两个原因之一; 语法或我的软件。 我目前正在使用EasyPHP 5.3.5.0在未连接到互联网的机器上构建本地网站。 将它连接到互联网不是一种选择。
我目前所了解的会话是与它相关的许多语法已被废弃,取而代之的是超全球性的$_SESSION
数组,这更容易使用。 start_session();
必须在与会话相关的任何语法之前。 但是,我的登录脚本没有建立会话,因为quick !isset ($_SESSION['username'])
总是返回true。
我的脚本是这样设置的:
PHP包含login.php,这是一种形式。 check_login.php是验证它,如果查询返回一行,它将重定向到login_success.php,它建立会话,给出一个欢迎消息,然后重定向(使用JavaScript)到主页。
有任何想法吗?
编辑包含更多信息:
这里是我的代码大纲:
index.php文件:
include 'main_login.php';
main_login.php:
if(!isset ($_SESSION['username'])){ ... Login form, action="cehcklogin.php" method="post" ... }else{ var_dump ($_SESSION): // Just to see if it works }
checklogin.php:
Connect to SQL $username = $_POST['username']; $password = $_POST['password']; $username / $password stripslashes / mysql_real_escape_string Query to find the username & password $count = mysql_num_rows($result); if($count = 1){ $_SESSION["username"] = $username; $_SESSION["password"] = $password; header("location:login_success.php"); }else{ echo "Wrong Username or Password." }
login_success.php:
登录过程在这里完成,重定向到家,这就是问题所在。
session_start(); var_dump($_SESSION); //This works if(!isset ($_SESSION['username'])){ header("location:index.php"); } Javascript redirect, and a welcome message appears.
它一直运行,直到你到达主页,应该设置$_SESSION['username']
,它不应该显示表单,但它确实。
看起来你没有在你的main_login.php中使用session_start()
,就像etranger所提到的那样。 您需要在每个新请求开始时调用该函数以开始使用会话。
否则,如果您调用session_start()
而您只是忽略了将其显示在代码示例中,那么在重定向期间会话ID可能会丢失。 您是使用基于cookie的会话还是将会话ID作为URL参数传递? 尝试在每个页面的顶部打印session_id()
或SID
。 这会让你知道会话何时丢失(会话ID将会改变或成为“”)。
如果您使用的是基于Cookie的会话,那么由于某种原因Cookie可能会丢失。 如果您使用URL参数传递会话ID,那么透明会话ID支持可能无法正常工作。
你必须尽可能早地调用session_start()
,并且必须在使用$_SESSION
之前,否则它将是空的。