写cookie和生成token
- if ($username == $U){
- if ($password == $P){
- $token = mt_rand(); // 生成token
-
- $fp = fopen("../temp/session_token", "w+");
- fwrite($fp, $token);
- fclose($fp);
-
- $cookieValue = authCode("$username,$password,$token", $textKey, "ENCODE");
- //echo $cookieValue;
- // 写入cookie
- createCookie("anehtaDoor", $cookieValue, 0, '/', '', 0, 1);
-
- // 跳转url到referer
- if (isset($_GET["redirect"])){ // 这里没检查跳转的域,有钓鱼的风险
- $redirect = $_GET["redirect"];
- header("Location: $redirect");
- } else {
- header("Location: admin.php");
- }
-
- } else { // 密码错
- echo $error;
- return false;
- }
- } else { // 用户名错
- echo $error;
- return false;
- }
校验cookie和token
- function checkLoginStatus(){
- if (!isset($_COOKIE["anehtaDoor"])){
- echo "";
- return false;
- }
-
- list($user, $pass, $token) = explode(",", authCode($_COOKIE["anehtaDoor"], $textKey, "DECODE"));
-
- if ($user && $pass && $token){
- // 保证只有一个有效的session
- if (!file_exists("../temp/session_token") || $token != file_get_contents("../temp/session_token")){
- echo "";
- return false;
- }
-
- if ($user == $U && $pass == $P){
- return true;
- } else {
- echo "";
- return false;
- }
- }
- }
还是需要在服务器端保存些东西;如果是服务器集群的话,可能要用到文件服务器或者cache服务器或者挂载的存储。
不过如果根据“约定大于配置”的思路,只要文件名利用的合理,实现应该还是很简便和高效的。
阅读(1178) | 评论(0) | 转发(0) |