我现在已经学习了一点点PHP,而且大部分内容都非常简单。我唯一能做的就是让会议开始工作。谷歌在这方面的努力是无情的。
这可能是两个原因之一;语法或我的软件。我目前正在使用EasyPHP 5.3.5.0在未连接到互联网的机器上构建本地网站。将其连接到互联网不是一种选择。
我目前对会话的了解是,许多与之相关的语法已被弃用,取而代之的是超级全局$_SESSION
数组,它更易于使用。 start_session();
必须在与会话相关的任何语法之前。但是,我的登录脚本没有建立会话,因为快速!isset ($_SESSION['username'])
总是返回true。
我的脚本设置如下:
PHP包括login.php,这是一个表单。 check_login.php验证它,如果查询返回一行,它将重定向到login_success.php,它建立会话,给出欢迎消息,然后重定向(使用JavaScript)到主页。
有什么想法吗?
编辑以包含更多信息:
以下是我的代码概要:
include 'main_login.php';
if(!isset ($_SESSION['username'])){ ... Login form, action="cehcklogin.php" method="post" ... }else{ var_dump ($_SESSION): // Just to see if it works }
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." }
登录过程一直到这里,重定向到家,这就是问题所在。
session_start(); var_dump($_SESSION); //This works if(!isset ($_SESSION['username'])){ header("location:index.php"); } Javascript redirect, and a welcome message appears.
这一切都有效,直到你到达$_SESSION['username']
应该设置的主页,它不应该显示表单,但确实如此。
答案 0 :(得分:6)
看起来你没有在你的main_login.php中使用session_start()
,就像etranger所提到的那样。您需要在每个新请求开始时调用该函数以开始使用会话。
否则,如果 调用session_start()
并且您忽略了在代码示例中显示它,那么可能会在重定向期间丢失会话ID。您是使用基于cookie的会话还是将会话ID作为URL参数传递?尝试在每页顶部打印session_id()
或SID
。这将告诉您会话何时丢失(会话ID将更改或“”)。
如果你正在使用基于cookie的会话,那么cookie可能会因某种原因而丢失。如果您使用URL参数传递会话ID,那么透明的会话ID支持可能无法正常工作。
答案 1 :(得分:1)
您必须尽早致电session_start()
,并且肯定在使用$_SESSION
之前,否则将为空。