在浏览器中查看和更改会话变量

时间:2010-03-12 03:04:50

标签: php debugging browser

调试PHP程序,是否有浏览器的附加/插件,我可以查看会话变量(那些PHP $ _SESSION [“foobar”])?

如果我可以更改变量中的值,那么最好。

4 个答案:

答案 0 :(得分:52)

无法操纵客户端会话中存储的值。

这是你在cookie上使用会话的主要原因之一 - 你控制数据。 使用cookie,用户可以操纵数据。

从客户端访问/操作会话数据的唯一方法是使用Ajax调用或其他JavaScript机制调用另一个php脚本,该脚本将通过{{3}执行会话数据的检索/操作函数。

答案 1 :(得分:21)

$_SESSION是服务器端变量数组。如果我们可以读取或更改值,我们可以做许多事情来破解或导致其他不良事件发生。

但是,使用phpinfo();我们可以查看会话变量 - 但我们无法更改该值。

更好的是,我们可以使用

调试所有会话变量
print_r($_SESSION); 
//if you echo "<pre>" before, and a closing "</pre>" after, it prints very cleanly.

其他一些有用的命令:

session_start(); // start session  -- returns Session ID
session_destroy(); // unset all session variable

Session是一个数组,所以如果你设置$_SESSION['key']='value';它就像$array['key']=value;一样 - 只有$ _SESSION的特殊之处在于它会一直存在,直到窗口关闭,或{{1} } 叫做。

答案 2 :(得分:2)

您可以使用以下代码:

<?php
error_reporting(E_ALL);
session_start();
if (isset($_POST['session'])) {
    $session = eval("return {$_POST['session']};");
    if (is_array($session)) {
        $_SESSION = $session;
        header("Location: {$_SERVER['PHP_SELF']}?saved");
    }
    else {
        header("Location: {$_SERVER['PHP_SELF']}?error");
    }
}

$session = htmlentities(var_export($_SESSION, true));
?>
<!DOCTYPE html>
<html lang="en-US">
    <head>
        <meta charset="UTF-8">
        <title>Session Variable Management</title>
        <style>
            textarea { font: 12px Consolas, Monaco, monospace; padding: 2px; border: 1px solid #444444; width: 99%; }
            .saved, .error { border: 1px solid #509151; background: #DDF0DD; padding: 2px; }
            .error { border-color: #915050; background: #F0DDDD; }
        </style>
    </head>
    <body>
        <h1>Session Variable Management</h1>
<?php if (isset($_GET['saved'])) { ?>
        <p class="saved">The session was saved successfully.</p>
<?php } else if (isset($_GET['error'])) { ?>
        <p class="error">The session variable did not parse correctly.</p>
<?php } ?>
        <form method="post">
            <textarea name="session" rows="<?php echo count(preg_split("/\n|\r/", $session)); ?>"><?php echo $session; ?></textarea>
            <input type="submit" value="Update Session">
        </form>
    </body>
</html>

答案 3 :(得分:0)

请注意,虽然会话变量&#39;存储在服务器端,会话ID在GET / POST URL(一个非常糟糕的想法)或存储在浏览器cookie中(更好的安全性),但如果你不喜欢操纵/攻击/等等。 t仔细考虑基于Cookie的会话ID。

http://en.wikipedia.org/wiki/Session_fixation

http://en.wikibooks.org/wiki/PHP_Programming/sessions#Avoiding_Session_Fixation