所以我试图让一个简单的基于会话的登录工作,我的会话根本没有保存。我尝试了很多东西,但没有任何作用!请帮忙!
编辑:添加了start_session,但它仍然是空的
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
...
$row = mysql_fetch_row($sql_result);
$_SESSION['id']= $row[0];
$_SESSION['uname'] = $row[1];
$_SESSION['pass'] = $row[2];
session_write_close(); <-- now removed, but the session is still empty
echo $row[1] . "Login accepted.<br />";
这是创建会话的代码。考虑了所有行,并且正在调用代码,但会话仍然是空的。
if(empty($_SESSION['uname'])) echo 'empty session';
另外,要注意firebug说会话存储中存储了0个对象。
答案 0 :(得分:2)
session_write_close()
结束当前会话并存储会话数据。
对$_SESSION
的任何后续调用都不会返回任何数据,因为会话已被写入然后关闭。
通常,在执行session_write_close()
重定向之前,您不会致电header('Location: http://example.org')
。由于您的代码中不是这种情况,因此应将其删除。
session_start()
我假设您在所有脚本的顶部调用session_start()
。
要测试您的会话是否正常工作,我建议您实施以下测试脚本:
<?php
session_start();
$_SESSION['test'] = 'Hello';
echo $_SESSION['test'] . ' World!';
// you should get: Hello World!
通过这种方式,您知道会话数组中肯定存在某些内容。在您的示例代码中,您将从数据库中获取数据,这可能会返回空值。
它们不是同一个东西。 PHP的会话存储在服务器上,而浏览器在浏览器中本地存储HTML5会话存储。 HTML5会话存储是仅持续该会话的客户端信息存储。有关详细信息,请参阅w3c specification。
PHP的$_SESSION
不会被存储或影响HTML5会话存储中的数据。
答案 1 :(得分:1)
来自http://php.net/manual/en/function.session-write-close.php:
结束当前会话并存储会话数据。
会话数据通常在脚本终止后存储 需要调用session_write_close()[...]
您过早关闭会话并存储数据,这显然不允许您为if内的调用保留数据。
您也忘记致电session_start()
(或将其包含在您发布的代码中)。
答案 2 :(得分:0)
在开始在PHP会话中存储用户信息之前,必须先启动会话。当您启动会话时,它必须位于代码的最开头,在发送任何HTML或文本之前。
e.g。
<?php
session_start(); // start up your PHP session!
?>
这段微小的代码将注册用户与服务器的会话,允许您开始保存用户信息并为该用户的会话分配UID(唯一标识号)。
答案 3 :(得分:0)
好的,我明白了。显然,我必须在任何使用会话信息的页面顶部调用start_session(),而不仅仅是创建会话的页面。谢谢大家的帮助。