2013-03-19 89 views
0

我试图在页面加载之间保存变量值。页面加载的PHP会话变量

我认为下面的代码在第一次用户点击页面时不会显示任何内容。下一次应该显示数字5.它在第一次和每次之后都显示一个零(0)。

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

我做错了什么?我的PHP服务器可能安装不正确?等

服务器设置

PHP Version 5.3.13 
session.auto_start Off Off 
session.bug_compat_42 Off Off 
session.bug_compat_warn Off Off 
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 /dev/urandom /dev/urandom 
session.entropy_length 0 0 
session.gc_divisor 1000 1000 
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 /var/php_sessions /var/php_sessions 
session.serialize_handler php php 
session.use_cookies On On 
session.use_only_cookies On On 
session.use_trans_sid 1 1 
+1

评论第3行$ _SESSION ['test']; – Ateszki 2013-03-19 19:20:20

+0

@Ateszki虽然这条线很可能不是OP想要做的,但它不应该成为问题。 – PeeHaa 2013-03-19 19:22:00

+0

我知道,这只是一个评论,清理代码,使事情更容易调试 – Ateszki 2013-03-19 19:25:50

回答

3
  1. session.save_path(/ var/php_sessions)目录是可写的。我看到你没有使用tmp目录,所以我问这个。

  2. session.use_trans_sid应为0 - 如果启用“use_trans_sid”,则会话标识每次都附加到URL上。我不确定ajax请求会发生什么,但我认为它会被附加到。

  3. 这是有点冲突使用session.use_only_cookies作为1和session.use_trans_sid作为1,因为use_only_cookies指定模块是否将只使用cookie来存储会话ID在客户端。

+0

/var/php_sessions不存在,我也无法创建它。这看起来像我需要问我的虚拟主机。谢谢。 – w0lf42 2013-03-19 19:41:06

+1

进行测试,您可以将其指向您的服务器上的可写目录,例如:session_save_path('/ home/example.com/my_sessions'); ini_set('session.gc_probability',1);或ini_set(session.save_path,'/ path/to/your/folder')http://php.net/manual/en/function.session-save-path.php – 2013-03-19 19:43:39

+0

可写目录是问题所在。 – w0lf42 2013-03-19 19:53:00

0

你可以尝试以下方法:

<?php 
session_start(); 
if (!isset($_SESSION['test'])) { 
    $_SESSION['test'] = 0; 
} 
echo $_SESSION['test']; 
$_SESSION['test'] = 5; 
?> 
+0

我试过了。不幸的是,这不起作用。 – w0lf42 2013-03-19 19:25:28

0
$_SESSION['test']; 

我觉得这条线是创建$ _SESSION数组中的新元素用钥匙'test'...因为没有赋值,所以它的值为0.

尝试将其更改为

if(!array_key_exists('test', $_SESSION)) { 
    $_SESSION['test'] = 5; 
} 
0

事情是这样的??:

<?php 
    session_start(); 
    if(isset($_SESSION['test'])) 
    {$_SESSION['test'] = 5;} 
    else 
    { 
     $_SESSION['test'] = ""; 
    } 
    echo $_SESSION['test']; 
?> 

PS:它的所有做这些事情的顺序,你应该检查会话是否存在分配5,如果不能创造var和分配没什么......你第一次执行这个脚本不是要显示什么,但后来它会显示5

Saludos;)

+0

我也试过,但没有发生。 – w0lf42 2013-03-19 19:31:47

+0

我在我的本地主机上测试过并且工作...第一次没有显示....如果脉冲f5然后在您的phpinfo中显示5每次 – Hackerman 2013-03-19 19:37:39

+0

....显示会话的配置....这些地雷:会议 启用 会话支持\t 登记保存处理\t文件中的用户注册 串行处理\t PHP php_binary WDDX – Hackerman 2013-03-19 19:39:29