对于一个项目,我正在创建一个Web应用程序,其中登录将是最重要的部分。不幸的是,我似乎无法使会话正常工作,因此登录根本不会持久。 以下是我在Testing/experimentation/debugging page.
上编写的一些简单代码这是测试页面的负责人。
<?
if(!isset($_SESSION)){
session_start();
}
?>
<!DOCTYPE html>
...
以下是使用会话数据的代码。
$_SESSION[0] = $_SESSION[0] + 1;
echo($_SESSION[0]);
它应该随着每次访问而增加,但它没有这样做,就像登录系统一样。
以下是phpinfo()
功能的会话设置,如果有帮助的话。
Session Support enabled
Registered save handlers files user sqlite
Registered serializer handlers php php_binary wddx
Directive Local Value Master Value
session.auto_start Off Off
session.bug_compat_42 On On
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_httponly Off Off
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 100 100
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.hash_bits_per_character 4 4
session.hash_function 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /tmp /tmp
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies On On
session.use_trans_sid 0 0
答案 0 :(得分:1)
你不需要!isset来检查你的会话,只需要调用session_start();位于处理会话变量的任何页面的顶部。
根级别的密钥必须是有效的标识符,因此会话[1]不起作用,但会话['1']会起作用。
Session documentation有一些有趣的限定词。
评论中还有一些更高级的例子:
如果您无法控制register_globals设置:(isset($ _ REQUEST ['_ SESSION']))。
答案 1 :(得分:0)
取自PHP session_start Documentation:
session_start()根据通过GET或POST请求传递的会话标识符创建会话或恢复当前会话,或通过cookie传递。
因此,要使用基于cookie的会话,您应始终在每个脚本的开头调用session_start()
以恢复当前会话。不检查$_SESSION
,PHP不会启动新会话但会恢复当前会话。
答案 2 :(得分:0)
我像这样设置我的会话 - (这是安全的,对我有用)
登录页面上的:
$_SESSION['fingerprint'] = md5($_SERVER['HTTP_USER_AGENT'] . PHRASE . $_SERVER['REMOTE_ADDR']);
//或只是$_SESSION['fingerprint'] = $login['id']
//将ID存储为会话(不安全)
(在配置页面上定义的短语)
然后在整个网站其余部分的标题上:
session_start();
if ($_SESSION['fingerprint'] != md5($_SERVER['HTTP_USER_AGENT'] . PHRASE . $_SERVER['REMOTE_ADDR'])) {
session_destroy();
header('Location: http://website login page/');
exit();
}
然后使用您的session['fingerprint']
答案 3 :(得分:0)
你能否稍微详细说明一下你的问题。如果你在多个页面上存在会话问题,那么你可能不会在每个页面上调用会话。登录后工作的每个页面都必须单独调用会话。知道