php $ _SESSION var非常奇怪的问题

时间:2013-08-01 14:48:12

标签: php algorithm

也许我太累了......但我无法弄清楚这段代码中的会话ID如何从149变为143.

echo "session id is".$_SESSION['userid'];
$smarty->assign('itemresults',$arr2);

$_SESSION['userid']

if (isset($_REQUEST['id']))
{
    $userid=$_REQUEST['id'];
}
else
{
echo "session id 1 is".$_SESSION['userid'];
    $userid=$_SESSION['userid'];
}
echo "session id 2 is".$_SESSION['userid'];

输出:

session id is149session id 2 value is143

更新:

好的,我发现如果我更改了var $ userid,问题就不再存在,但为什么为$ userid分配一个值也会修改$ _SESSION ['userid']?

以下代码有效:

if (isset($_REQUEST['id']))
{
    $userid2=$_REQUEST['id'];
}
else
{
echo "session id 1 value".$_SESSION['userid'];
    $userid2=$_SESSION['userid'];
}

2 个答案:

答案 0 :(得分:1)

你已经开启register_globals,这是一个潜在的安全漏洞(很容易陷入你的注意),还有一个死胡同(它从5.4开始)。

http://www.php.net/manual/en/ini.core.php#ini.register-globals

  

是否将EGPCS(环境,GET,POST,Cookie,服务器)变量注册为全局变量。

     

自PHP 4.2.0起,此指令默认为关闭。

     

请阅读Using register_globals上的安全章节以获取相关信息。

     

警告

     

自PHP 5.3.0开始,此功能已被弃用,自PHP 5.4.0起已被删除。

答案 1 :(得分:0)

您是否已将$userid作为会话值的引用?我可以或多或少地像这样重现它:

<?php
session_start();

// Put 10 in the session
$_SESSION['userid'] = 10;

// Get a reference to that session variable (note the `&`)
$userid = &$_SESSION['userid'];

// Increment
$userid++;

echo $_SESSION['userid'];  // 11