码迷,mamicode.com
首页 > Web开发 > 详细

php session偶尔写入失败的原因

时间:2014-12-17 09:42:27      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:style   blog   ar   io   color   sp   on   div   art   

session_start();

var_dump($_SESSION);

$key = sprintf(‘%05d‘, mt_rand(0, 99999));
$key = strval($key);
$val = time();

$_SESSION[$key] = $val;

这是我的代码,经测试后大部分情况下无法输出刚才设置的session,那就是写入失败了。

我百思不得其解,如果说失败的话都要失败,为何偶尔还有成功的呢?

后来单独测试的时候把error_reporting 全部打开了,发现提示这样的错误

 Notice: Unknown: Skipping numeric key 454352 in Unknown on line 0

经查证,为如下原因

The PHP session storage mechanism was originally built around "registering" variables, so the keys in $_SESSION must be names that could be treated as variables in their own right.

This means that $_SESSION[42] is invalid, because $42 wouldn‘t be a valid variable name, and since $foo[42] and $foo[‘42‘] refer to the same thing, $_SESSION[‘42‘] is invalid as well.

The solution is either to use a prefix on your session variables (e.g. $_SESSION[‘row_count_‘ . $x] = $row[‘Count‘];) or make them into an array, which you can then loop over etc later (e.g. $_SESSION[‘row_counts‘] = array(); ... $_SESSION[‘row_counts‘][$x] = $row[‘Count‘];)

Note: this limitation is actually part of the "serialization handler" used when writing the session to disk, which is why the errors have no context (they‘re fired while PHP is shutting down). In very recent versions of PHP there is a setting of session.serialize_handler which doesn‘t have this limitation

php session偶尔写入失败的原因

标签:style   blog   ar   io   color   sp   on   div   art   

原文地址:http://www.cnblogs.com/gaoshikao/p/4168614.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!