在我的网页上,我有一个创建会话的登录表单 - 但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');
正在制作:
NULL
string(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则重新加载页面 - 它会这样做)
我无法弄清楚为什么一切都在运行,就像登录成功一样,但重新加载后会话无法被识别?
答案 0 :(得分:1)
将它放在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将调用open和read会话保存处理程序。这些将是默认提供的内置保存处理程序或PHP扩展(如SQLite或Memcached);或者可以是session_set_save_handler()定义的自定义处理程序。读取回调将检索任何现有的会话数据(以特殊的序列化格式存储),并且将被反序列化并用于在读取回调将已保存的会话数据返回到PHP会话处理时自动填充$ _SESSION超全局。