下面的问题是一个安全问题。只要用户的浏览器打开,我就使用 Sessions 来保持用户登录到我的网站。
现在我保持用户登录的 php 代码非常简单。当用户登录时,我首先使用用户名创建会话(authentication.php):
if (($row['user'] == $usr)&&($row['value'] == $pwd)) {
$response = "ok";
session_start();
$_SESSION['name'] = $usr;
break;
}
然后我从每个页面创建对 JavaScript 的调用以检查用户是否存在我将网页(AJAX)更改为看起来好像用户已登录(显示在标题欢迎中),JavaScript 如下所示:
function checkUserExistance(data,size)
{
var xmlhttp;
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else {// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
var response = xmlhttp.responseText;
document.getElementById("title").value = response;
}
}
xmlhttp.open("POST",url + page,true);
xmlhttp.send();
}
现在在服务器端检查用户是否已登录,我使用以下简单函数,JavaScript 正在调用该函数:
session_start();
if (isset($_SESSION['user'])) {
echo $_SESSION['name'];
}
现在我的问题很简单,就是这样的正确方法吗?只要浏览器打开就保持用户身份验证,因为如果我做对了,JavaScript 就在客户端,这意味着每个人都可以更改它并跳过服务器端在页面上发表评论的检查。
我的解决方案是在发布评论时添加另一个检查是在服务器端检查用户是否有一个打开的会话但是用户可以假装是另一个已经过身份验证的用户,这太令人沮丧了......我错过了什么应该我愿意?