在我的网页上,我有一个创建会话的登录表单 - 但PHP似乎没有承认它:
require_once('globals.php');
require_once('header.php');
if(!isset($_SESSION) || session_id() == '')
{
$x = (isset($_SESSION));
var_dump($_SESSION['username']);
?><br><?PHP
var_dump(session_id());
?><br><?PHP
var_dump($x);
require_once('system/default.php');
}
else
{
require_once('system/' . $SystemScreens[$_SESSION['screen']]);
}
require_once('footer.php');
正在生产:
零
字符串(0) "
布尔值(假)
登录脚本的相关部分(其中$finalCheck
是一个布尔值,说明登录是否成功)
if($finalCheck)
{
session_start();
$_SESSION['userID'] = $UserID;
$_SESSION['username'] = $username;
$_SESSION['accessLevel'] = $UserAccess;
$_SESSION['screen'] = 1;
}
else
{
if(session_id() != '' || isset($_SESSION))
{
if (ini_get("session.use_cookies"))
{
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"]);
}
session_destroy();
}
}
我知道登录函数返回true
因为我有视觉确认(结果返回到 AJAX 请求,如果为 true,则重新加载页面 - 确实如此)
我无法弄清楚为什么一切都像登录成功一样运行,但在重新加载发生后无法识别会话?
把它放在你的 PHP 开始标记之后
<?php
session_start();
//... your code....
//more code....
基本会话示例
<?php
session_start();
echo 'Welcome to page #1';
$_SESSION['favcolor'] = 'green';
$_SESSION['animal'] = 'cat';
$_SESSION['time'] = time();
// Works if session cookie was accepted
echo '<br /><a href="page2.php">page 2</a>';
// Or maybe pass along the session id, if needed
echo '<br /><a href="page2.php?' . SID . '">page 2</a>';
?>
session_start() 根据通过 GET 或 POST 请求传递或通过 cookie 传递的会话标识符创建会话或恢复当前会话。
当调用 session_start() 或会话自动启动时,PHP 将调用打开和读取会话保存处理程序。这些将是默认提供的内置保存处理程序,也可以是 PHP 扩展(例如 SQLite 或 Memcached)提供的内置保存处理程序;也可以是 session_set_save_handler() 定义的自定义处理程序。读回调将检索任何现有的会话数据(以特殊的序列化格式存储),并且将被取消序列化,并在读回调将保存的会话数据返回到 PHP 会话处理时自动填充 $_SESSION 超全局。
获取更多信息 : http://us3.php.net/function.session-start