是否有任何工具可以让我编辑$ _SESSION的内容?我正在尝试调试依赖于会话状态的脚本,我希望能够更改会话变量,而不必更改数据库,销毁会话并重新创建它。我可能会在给定的时间内建立一个临时会话编辑器,但我现在没有时间。
答案 0 :(得分:2)
$_SESSION
中的信息只是作为序列化字符串存储在磁盘上。 (如果你不使用类似memcached会话存储的东西)
因此,阅读该文件,对其内容进行反序列化,更改适当的值然后将其序列化应该是您需要的所有内容。
如果您不想处理,可以在session_id()
之前设置session_start()
,然后使用php编辑值,然后再调用session_write_close()
将其存储在磁盘上。
会话ID的示例脚本:
<?php
session_id("838c4dc18f6535cb90a9c2e0ec92bad4");
session_start();
var_dump($_SESSION);
$_SESSION["a"] = "foo";
session_write_close();
反序列化的示例脚本(function taken from the comments on the unserialze php.net page)
<?php
session_save_path("./session");
session_start();
$_SESSION["x"] = 1;
$id = session_id();
var_dump($id);
session_write_close();
$session = file_get_contents("./session/sess_$id");
var_dump($session);
function unserialize_session_data( $serialized_string ) {
$variables = array( );
$a = preg_split( "/(\w+)\|/", $serialized_string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE );
for( $i = 0; $i < count( $a ); $i = $i+2 ) {
$variables[$a[$i]] = unserialize( $a[$i+1] );
}
return( $variables );
}
var_dump(unserialize_session_data($session));
将它重新组合起来并不困难。
答案 1 :(得分:2)
要稍微扩展一下,只需添加添加新会话变量的功能:
<?php
function listData (array $data, array $parents = array ())
{
$output = '';
$parents = array_map ('htmlspecialchars', $parents);
$fieldName = $parents?
'[' . implode ('][', $parents) . ']':
'';
foreach ($data as $key => $item)
{
$isArr = is_array ($item);
$output .= $isArr?
'<li><h4>' . htmlspecialchars ($key) . '</h4>':
'<li><label>' . htmlspecialchars ($key) . '</label>: ';
$output .= $isArr?
'<ul>' . listData ($item, array_merge ($parents, array ($key))) . '</ul>':
'<input type="text" name="fields' . $fieldName . '[' . htmlspecialchars ($key) . ']" value="' . htmlspecialchars ($item) . '" />';
$output .= "</li>\n";
}
return ($output);
}
session_start ();
if ($_POST ['fields'])
{
$_SESSION = $_POST ['fields'];
session_commit ();
}
if ($_POST['newfield'])
{
$_SESSION[$_POST['newfield']] = $_POST['newfieldvalue'];
session_commit ();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Session Editor</title>
<style type="text/css">
label {
display: inline-block;
min-width: 8em;
text-align: right;
padding-right: .3em;
}
</style>
</head>
<body>
<h2>Session Editor</h2>
<form action="<?php echo ($_SERVER ['SCRIPT_NAME']); ?>" method="post">
<ul>
<?php echo (listData($_SESSION)); ?>
</ul>
<div>
<input type="submit" />
</div>
</form>
-------------------------
<form action="<?php echo ($_SERVER ['SCRIPT_NAME']); ?>" method="post">
New Session Var:<input type="text" name="newfield" /><br />
Session Var Value:<input type="text" name="newfieldvalue" />
<div>
<input type="submit" />
</div>
</form>
</body>
</html>
答案 2 :(得分:1)
非常基本的会话编辑器的源代码(是的,找到了一点时间来实际工作)。
<?php
function listData (array $data, array $parents = array ())
{
$output = '';
$parents = array_map ('htmlspecialchars', $parents);
$fieldName = $parents?
'[' . implode ('][', $parents) . ']':
'';
foreach ($data as $key => $item)
{
$isArr = is_array ($item);
$output .= $isArr?
'<li><h4>' . htmlspecialchars ($key) . '</h4>':
'<li><label>' . htmlspecialchars ($key) . '</label>: ';
$output .= $isArr?
'<ul>' . listData ($item, array_merge ($parents, array ($key))) . '</ul>':
'<input type="text" name="fields' . $fieldName . '[' . htmlspecialchars ($key) . ']" value="' . htmlspecialchars ($item) . '" />';
$output .= "</li>\n";
}
return ($output);
}
session_start ();
if ($_POST ['fields'])
{
$_SESSION = $_POST ['fields'];
session_commit ();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Session Editor</title>
<style type="text/css">
label {
display: inline-block;
min-width: 8em;
text-align: right;
padding-right: .3em;
}
</style>
</head>
<body>
<h2>Session Editor</h2>
<form action="<?php echo ($_SERVER ['SCRIPT_NAME']); ?>" method="post">
<ul>
<?php echo (listData ($_SESSION)); ?>
</ul>
<div>
<input type="submit" />
</div>
</form>
</body>
</html>
显然非常简单,但它至少允许我编辑任意会话数据而无需每次都编写新代码。可能会在某些方面对此进行更多的工作,将其构建成一个功能齐全的编辑器,但它现在可以做到。
答案 3 :(得分:0)
那里有哪些工具可以让我编辑$ _SESSION的内容?
$_SESSION['var']="whatever value";
答案 4 :(得分:0)
var_dump( $_SESSION );
查看您的会话
和
$_SESSION['variabletoset'] = 'value';
安排会议
您通常希望var_dump会话以查看调试时的内容。
答案 5 :(得分:0)
就像Col. Shrapnel提到的那样,我只需在同一服务器上设置一个新的PHP脚本,如下所示:
<?php
session_start();
$_SESSION['key'] = 'value'; // repeat for every value you need to change
然后每次需要更新会话变量时执行脚本。只需在一个浏览器选项卡中打开您的应用程序,在另一个浏简单。
我自己也不会费心篡改会话临时文件。
答案 6 :(得分:0)
如果您使用PHPEdit
,也可以在调试会话中实时执行此操作