PHP Session不保存/存储

时间:2012-11-17 11:35:04

标签: php

对于一个项目,我正在创建一个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

4 个答案:

答案 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)

你能否稍微详细说明一下你的问题。如果你在多个页面上存在会话问题,那么你可能不会在每个页面上调用会话。登录后工作的每个页面都必须单独调用会话。知道