您的位置:首页 > 编程语言 > PHP开发

PHP使用数字作为SESSION的Key一刷新页面,Session就消失了

2016-12-12 18:01 295 查看
首先我想要实现的效果是通过SESSION变量限制并统计文章的浏览量,具体想法:每个文章都有一个ID号,进入文章页面通过SESSION,为该变量建立对应的SESSION值,例:ID为9号的文章,$_SESSION['9']=9;然后通过判断是否存在对应ID为9的$_SESSION,如果不存在对应的文章浏览量加1,存在的话文章浏览量不变,具体实现如下使用thinkphp实现:

$session_id=$get['id']; //获取文章id
if(isset($_SESSION["$session_id"])){

}else{
$conn=M('Article');
$conn->where($map)->setInc('article_num',1); // 用户的浏览量加1
$_SESSION["$session_id"] =$count_id;
}
var_dump($_SESSION);

但是效果并没有达到我想的那样,刷新页面浏览量还是会一直增加?这是为什么呢???

我使用var_dump()打印出Session变量看了一下,上面并没有对应的SESSION变量,也就是SESSION变量一刷新页面上面就没有了

不应该啊,SESSION变量是在服务器上存在的,为什么刷新一下页面就没有了呢?

我想了好久,也没有想出为什么,但是当我把SESSION的变量名改为字符串,发现SESSION变量就不再消失了

PHP的会话存储机制最初是围绕“注册”的变量,所以在按键
$_SESSION
必须是可以被视为他们自己的权利的变量名。

所以我们使用SESSION的时候key的话应该使用字符串的形式

我的解决办法是:

$session_id='session_id' . $get['id'];
这样就可以限制每次打开浏览器一篇文章的浏览量只能加1了

还有使用数字作为索引的话:

例:

$_SESSION['1'] = 'value';
会出现

( ! ) Notice: Unknown: Skipping numeric key 1 in Unknown on line 0
所以建议不使用数字作为SESSION的Key
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息