出于安全的考虑,网站将用户的登陆信息以session的形式存储于服务器端,即在登陆成功时设置索引为用户名username的session,当用户登出时注销此session。
在客户端则以cookie的形式存储用户名,当需要完成某项操作时,用户端需提交此cookie,服务器根据用户名检索session以判断用户是否登录。
相关代码如下:
登陆:
if($_POST['submit']){
if($row['username']==$username &&$row['password']==$password){
setcookie('uname',$username,time()+7200);
session_start();
$_SESSION[$username]=1;
echo "<script>alert('successfully');window.location.href= 'index.php';</script>";
}
else echo "<script>alert('failed');history.go(-1)</script>";//返回之前的页面
}
登出:
<?php
$flag=0;
if(isset($_GET["out"])){
if($_GET["out"])
setcookie('uname','',time()-1);
if(isset($_SESSION[$_COOKIE['uname']])){
unset($_SESSION[$_COOKIE['uname']]);
}
$flag=1;//防止服务器接收到getout操作时已经认为该用户有cookie,然后下面的COOKIE[NAME]已经有了,服务器返回给他的才是空的
}
}
if($flag!=1){
$link=mysqli_connect('localhost','users','666','users');
if(isset($_SESSION[$_COOKIE['uname']])){
$name=$_COOKIE['uname'];
$query=mysqli_query($link,"SELECT username FROM users WHERE username = '$name'");
$row=mysqli_num_rows($query);
if($row==1){
echo '<i class="fa fa-user"></i> '.$name.'<a href="index.php?out=1">退出</a>';
}
}else{
echo '<a href="login.php"><i class="fa fa-user"></i><span>登录/注册</span></a>';
}
}
else{
echo '<a href="login.php"><i class="fa fa-user"></i><span>登录/注册</span></a>';
}
?>