<?php
session_start();
// After user logged in
session_regenerate_id();
$_SESSION['logged_in'] = 1;
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['agent'] = $_SERVER['HTTP_USER_AGENT'];
// Session Checking
function session_check(){
if(isset($_SESSION['logged_in']) && !empty($_SESSION['logged_in'])){
if(isset($_SESSION['ip']) && !empty($_SESSION['ip']) && ($_SESSION['ip'] == $_SERVER['REMOTE_ADDR'])){
if(isset($_SESSION['agent']) && !empty($_SESSION['agent']) && ($_SESSION['agent'] == $_SERVER['HTTP_USER_AGENT'])){
return true;
} else {
echo "Not allowed to view this page. Error no: 3. You will be redrected to login page in few seconds";
header('Refresh: 3; url=./login.php');
}
} else {
echo "Not allowed to view this page. Error no: 2. You will be redirected to login page in few seconds";
header('Refresh: 3; url=./login.php');
}
} else {
echo "You are not allowed to view this page. Error no: 1. You will be redirected to login page in few seconds";
header('Refresh: 3; url=./login.php');
return false;
}
}
而且我不断收到错误NO2当我运行:这个php代码有什么问题,继续收到错误没有2?
if(session_check()){ echo "something";}
难道是因为我使用动态IP?
我的代码是否足够保护会话劫持?
如果我排除($_SESSION['ip'] != $_SERVER['REMOTE_ADDR'])
,它可以很好地工作。
重要的问题:
你有什么反会话劫持的方法呢?可以与我们分享?使用IP检查,用户代理检查或可能的其他方法?
还有一个缺失?>。它在你的实际代码中吗? – Extrakun 2009-08-11 07:13:39
一般来说:如果你打算使用'empty()',你可以省略'isset()'。 'empty()'不会抱怨不存在的变量。 – deceze 2009-08-11 07:14:12
@extrakun:如果我失踪?>,它不会是“错误no2”..我已经包括?>。 @deceze:谢谢你的提示。我不知道。我的代码有什么问题吗? – bbtang 2009-08-11 07:15:41