即使是简单的测试页,PHP会话也会丢失

时间:2013-08-26 07:43:43

标签: php apache session config

代码

<?php
session_start();
var_dump($_SESSION);
$_SESSION['test'] = 5;

输出

array(0) { }

的phpinfo()

Session Support enabled
Registered save handlers    files user mm
Registered serializer handlers  php php_binary

Directive   Local Value Master Value
session.auto_start  Off Off
session.bug_compat_42   Off Off
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 On  On
session.cookie_lifetime 0   0
session.cookie_path /   /
session.cookie_secure   Off Off
session.entropy_file    /dev/urandom    /dev/urandom
session.entropy_length  16  16
session.gc_divisor  1000    1000
session.gc_maxlifetime  1440    1440
session.gc_probability  1   1
session.hash_bits_per_character 5   5
session.hash_function   1   1
session.name    PHPSESSID   PHPSESSID
session.referer_check   no value    no value
session.save_handler    files   files
session.save_path   /var/lib/php5   /var/lib/php5
session.serialize_handler   php php
session.use_cookies On  On
session.use_only_cookies    On  On
session.use_trans_sid   0   0

/tmp也可写:

# ls -la /tmp/
drwxrwxrwt 22 root    root        4096 Aug 26 09:44 .

对此有何想法?

3 个答案:

答案 0 :(得分:1)

如果你的会话似乎没有开始,你可以做两件事:

  1. 检查session_start()的返回值;如果出现错误,它将返回false

  2. 显示通知和警告:

    error_reporting(-1); 
    ini_set('display_errors', 'On');
    

    在实时服务器上,您可能希望改为使用error_log

  3. 通过Cookie或通过查询字符串传递会话ID(不推荐),检查会话是否正确延续。

答案 1 :(得分:1)

为了测试您的示例,您必须在两次运行此文件!一个用于填充会话变量,另一个用于打印会话数组。请查看以下示例:

<?php
session_start();

$_SESSION['test'] = 5;
var_dump($_SESSION);

答案 2 :(得分:0)

session.save_path /var/lib/php5不是/tmp

$ sudo chmod 777 /var/lib/php5
$ sudo rm /var/lib/php5/*

会话再次开始工作。

Jack是对的:不要将777用于会话文件!

$ sudo chown wwwrun:www /var/lib/php5
$ sudo chmod 700 /var/lib/php5