session_start返回true,但当session_name包含空格时不起作用

时间:2013-09-05 07:23:22

标签: php session

有人可以解释这是否是来自PHP的正确行为,我希望session_start()返回false并收到警告,说明session_name包含非法字符。

重现的代码:

<?php
session_name('m m');
var_dump(session_start());

if(!isset($_SESSION['count'])) {
     $_SESSION['count'] = 0;
}
else {
     $_SESSION['count']++;
}

echo session_name();
echo $_SESSION['count'];

运行一次:

bool(true) m m0

重新加载页面:

bool(true) m m0

本来应该(如果会议有效):

bool(true) m m1

session_start()返回true,表示会话已启动。 $_SESSION['count']表示不起作用。会话名称中的非法字符没有警告。

我在手册页上找不到任何提示,也没有关于会话有效字符的定义。

2 个答案:

答案 0 :(得分:5)

PHP生成如下内容:

Set-Cookie: m+m=unttot9siteipcsrc0r064hn37; path=/

...浏览器(Firefox / 23)将其发回:

Cookie: m+m=unttot9siteipcsrc0r064hn37

到目前为止一切顺利。但是PHP会生成一个新的会话ID:

Set-Cookie: m+m=7tmi7kd8n27ef3qdk5q706gk85; path=/

这是一个错误吗?我会说这不是your session name is clearly invalid

  

会话名称引用会话的名称,该名称用于cookie和URL(例如PHPSESSID)。 它应该只包含   字母数字字符;它应该简短且具有描述性(即   对于启用了Cookie警告的用户)。如果指定了name,则   当前会话的名称已更改为其值。

     

警告

     

会话名称不能仅包含数字,必须至少包含一个字母。否则,每次都会生成一个新的会话ID。

如果遵循规则,它会按预期工作:

session_name('mxm');

总结一下:

  • 不要猜测,使用浏览器开发者控制台和其他工具
  • 阅读文档; - )

编辑:刚刚注意到你这么说:

  

我在手册页上找不到任何提示,也没有关于会话有效字符的定义。

我在session_name()的手册页中找到了这些信息。

答案 1 :(得分:-1)

session_name()中的空白将不起作用。

session_name('m m');

session_name('mm');