怎么解决 :
警告:session_start()[function.session-start]:会话ID太长或包含非法字符,有效字符是az,AZ,0-9和' - ,'在......第3行
警告:session_start()[function.session-start]:无法发送会话cookie - 已经发送的标头(输出从.....:3开始).....在第3行
警告:session_start()[function.session-start]:无法发送会话缓存限制器 - 已经发送的头文件(输出从.....:3开始).....在第3行
Evi*_*ker 44
这是一个信息漏洞,恶意攻击者可能会更改cookie并将非法字符分配给PHPSESSID以公开此PHP警告,其实际上包含文件路径和用户名等多汁信息!
Ser*_*min 15
看看这个session_start()
讨论的解决方法:
session_start()
如果PHPSESSID包含非法字符,则生成警告警告:在session_start()[function.session启动]:会话ID包含非法字符,有效字符包括AZ,az,0-9和 - 在上线/home/para/dev/mon_site/header.php '' 17
为了避免我写这个:
Run Code Online (Sandbox Code Playgroud)<?php function my_session_start() { if (ini_get('session.use_cookies') && isset($_COOKIE['PHPSESSID'])) { $sessid = $_COOKIE['PHPSESSID']; } elseif (!ini_get('session.use_only_cookies') && isset($_GET['PHPSESSID'])) { $sessid = $_GET['PHPSESSID']; } else { session_start(); return false; } if (!preg_match('/^[a-z0-9]{32}$/', $sessid)) { return false; } session_start(); return true; } ?>
alp*_*ere 14
这个问题有一个错误报告(https://bugs.php.net/bug.php?id=68063)
您可以检查session_start是否成功,并在需要时生成id:
$ok = @session_start();
if(!$ok){
session_regenerate_id(true); // replace the Session ID
session_start();
}
Run Code Online (Sandbox Code Playgroud)
小智 12
我编辑了Andron之前的解决方案!(修复返回值)并添加my_session_start()的评估输出.以前的解决方案解决了错误消息的问题,但我需要开始会话.
/**
* @return boolean return TRUE if a session was successfully started
*/
function my_session_start()
{
$sn = session_name();
if (isset($_COOKIE[$sn])) {
$sessid = $_COOKIE[$sn];
} else if (isset($_GET[$sn])) {
$sessid = $_GET[$sn];
} else {
return session_start();
}
if (!preg_match('/^[a-zA-Z0-9,\-]{22,40}$/', $sessid)) {
return false;
}
return session_start();
}
if ( !my_session_start() ) {
session_id( uniqid() );
session_start();
session_regenerate_id();
}
Run Code Online (Sandbox Code Playgroud)
我建议使用"更正确"的功能版本.
几点说明:
所以更新版本看起来像这样:
<?php
function my_session_start()
{
$sn = session_name();
if (isset($_COOKIE[$sn])) {
$sessid = $_COOKIE[$sn];
} else if (isset($_GET[$sn])) {
$sessid = $_GET[$sn];
} else {
session_start();
return false;
}
if (!preg_match('/^[a-zA-Z0-9,\-]{22,40}$/', $sessid)) {
return false;
}
session_start();
return true;
}
?>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
45495 次 |
最近记录: |