web-dev-qa-db-ja.com

ブラウザーでセッション変数を表示および変更する

PHPプログラムのデバッグ、セッション変数を表示できるブラウザ用のアドオン/プラグインはありますか(PHP $ _SESSION ["foobar" ])?

変数の値を変更できる場合に最適です。

28
ohho

クライアント側からセッションに保存された値を操作する方法はありません。

これが、Cookieを介してセッションを使用する主な理由の1つです。データを制御します。 Cookieを使用すると、ユーザーはデータを操作できます。

クライアント側からセッションデータにアクセス/操作する唯一の方法は、 を介してセッションデータの取得/操作を行う別のphpスクリプトを呼び出すAjax呼び出しまたはその他のJavaScriptメカニズムを使用することです。 session_ 関数。

55
Jacob Relkin

_$_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['key']='value';_を設定すると、_$array['key']=value;_と同じです-のみ、$ _ SESSIONの特別な点は、ウィンドウが閉じられるまで持続すること、またはsession_destroy()と呼ばれます。

21
apis17

以下のコードを使用できます。

<?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>
2
CoderX

ただし、セッションの「変数」はサーバー側に保存されますが、セッションIDはGET/POST URL(非常に悪い考え)に格納されるか、ブラウザCookieに格納されます(セキュリティが向上します)が、依然として操作されやすいことに注意してくださいCookieベースのセッションIDを慎重に渡さない場合は/ attack/etc。

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

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

0
pjm