利用php实现一周之内自动登录存储机制(cookie、session、localStorage)


Posted in PHP onOctober 31, 2016

cookie、session、localStorage这三个应该是最让程序员头疼的了,我利用简单的登录界面的username和password来说明一下吧.

1.cookie用来存储用户相关数据,存储的位置在用户本地:

首先是登录界面定义:

<form action="server.php" method="post"> 
        <input type="text" name="username" class="username" placeholder="Username"> 
        <input type="password" name="password" class="password" placeholder="Password"> 
        <button type="submit">Sign me in</button> 
        <div class="error"><span>+</span></div> 
      </form>

上面的代码大家都懂吧,就是一个表单.然后就是action的server.php服务器处理,

<?php 
/** 
 * Created by PhpStorm. 
 * User: Administrator 
 * Date: 2016-7-19 
 * Time: 11:50 
 */ 
include "data.php"; 
header("Content-type:text/html;charset=utf-8"); 
//echo "ddd"; 
if ($_SERVER["REQUEST_METHOD"] == "POST") {//第一步 
//  echo "ddd1"; 
  if ($_POST["username"] == $info["username"] && $_POST["password"] == $info["password"]) {//第二步 
    $myArr = $_POST; 
    $myArr = array_merge($myArr, array("loginIP" => $_SERVER["REMOTE_ADDR"], "loginTime" => time())); 
    se($myArr); 
    setcookies($_POST["username"], $_POST["password"]); 
    setStroage($_POST["username"], $_POST["password"]); 
    echo "<script> 
   window.location.href='index.php'; 
  </script>"; 
  } 
} else { 
  echo "<script> 
alert('请登录'); 
window.location.href='login.html'; 
</script>"; 
} 
//通过session保存到服务器 
function se(array $arr) 
{ 
  session_start(); 
  $_SESSION["username"] = $arr["username"]; 
  $_SESSION["password"] = $arr["password"]; 
  $_SESSION["loginIP"] = $arr["loginIP"]; 
  $_SESSION["loginTime"] = $arr["loginTime"]; 
} 
//通过cookie保存到本地 
function setCookies($username, $password) 
{ 
  setcookie("username", $username, time() + 120); 
  setcookie("password", $password, time() + 120); 
} 
 
//echo "<script> 
// 
//  localStorage.setItem('username','$username'); 
//localStorage.setItem('password'," . "'" . $password . "'" . "); 
//</script>"; 
function setStroage($username, $password){ 
  echo "<script> 
  localStorage.setItem('username'," . "'" . $username . "'" . "); 
  localStorage.setItem('password'," . "'" . $password . "'" . "); 
  </script>"; 
}

上面加载了一个data.php其实里面就是一条数据,

$info=array("username"=>"admin","password"=>"admin");

这个数据主要是核对输入的用户名和密码是否正确.

首先在server里面对不也是判断是不是post请求,如果不是就提示重新登录,返回登录界面,确定是post之后,再进行判断信息是不是输入正确,如果正确就setcookie一下.下面的代码我一一解释

$myArr = $_POST;//把post传过来的数据放在myarr;里面 
    $myArr = array_merge($myArr, array("loginIP" => $_SERVER["REMOTE_ADDR"], "loginTime" => time()));//这是穿的另外两个参数,一个是用户登录地址,另一个是cookie存活时间(会在寻获时间以为消失) 
    se($myArr); 
    setcookies($_POST["username"], $_POST["password"]);//这个是设置cookie,把传过来的两个值设置成cookie,会有一个getCookie进行接收 
    setStroage($_POST["username"], $_POST["password"]); 
    echo "<script> 
  window.location.href='index.php';

其实这时候cookie已经按我们设置的那个时间存储下来了,然后我们要做的就是免登陆功能,的后台服务器的处理,就像我们登陆其他软件,会提示一周之内免登陆密码,

就是下面的代码:

function intialLoadInfo(){ 
    $("input:text").val(getCoolieByKey("username"));//这两个就是吧下面获取的之前输入过的用户名和密码进行自动填写(实现目的) 
    $("input:password").val(getCoolieByKey("password")); 
  } 
  //通过key值获取cookie 
  function getCoolieByKey(key){ 
    var cookie=document.cookie.split(";");//这行代码是吧cookie的值进行分离(split),以便于下面遍历(分离后就是一个数组一样) 
    for(var i=0;i<cookie.length;i++){//遍历长度 
      var value=cookie[i].trim();//去掉空格 
      if (value.indexOf(key)==0){//判断是不是第一个值 
        val=value.split("="); 
        console.log(val[0]); 
        return val[1]; 
      } 
    } 
  }

上面第一个方法执行getCookieByKey(key);

这个带参数的函数接收的参数就是我们上面封装好的myArr数据了;

然后详细解释就在代码了,大家可以参考了.

2.session:session是用来在服务器端存储用户信息,当浏览器关闭的时候,会自动销毁;

session_start();

超级数组$_SESSION可以实现session的设置与读取;

代码如下:

function se(array $arr) 
{ 
  session_start(); 
  $_SESSION["username"] = $arr["username"]; 
  $_SESSION["password"] = $arr["password"]; 
  $_SESSION["loginIP"] = $arr["loginIP"]; 
  $_SESSION["loginTime"] = $arr["loginTime"]; 
}

首先就会上面的代码,一样是获取四个属性,放到我们的$_SESSION里面;存储下来:

然后就是上面那个代码,带啊可以看到有一个se

$myArr = array_merge($myArr, array("loginIP" => $_SERVER["REMOTE_ADDR"], "loginTime" => time()));//这是穿的另外两个参数,一个是用户登录地址,另一个是cookie存活时间(会在寻获时间以为消失) 
    se($myArr);

这里就是为了session写的;

他主要是存储四个属性,username.password.IP.time

上面代码中也注释;其实现在我们就可以在session里面查到我们这个自己创建的session了

3.JS端的localStorage:HTML5提供的本地存储方式(可以称为“键值对”数据库);

设置数据:localStorage.setItem("key","value");
读取数据:localStorage.getItem("key");读取的结果是一个字符串;
删除数据:localStorage.removeItem("key");

详细代码如下:

在html下面写的js文件就是  然后就是实现:

$(function (){ 
    if (localStorage.getItem("username")!=""&&localStorage.getItem("password")!=""){ 
      document.getElementById("username").value=localStorage.getItem("username"); 
      document.getElementById("password").value=localStorage.getItem("password"); 
 
    } 
  });

 这个函数主要就是创建用php创建的

function setStroage($username, $password){ 
  echo "<script> 
  localStorage.setItem('username'," . "'" . $username . "'" . "); 
  localStorage.setItem('password'," . "'" . $password . "'" . "); 
  </script>"; 
}

其实这个东西需要自己慢慢写,我虽然能写出来,但是每次用的时候还是要参考一下这个例子,所以希望我用了好长时间的万能例子对大家有用,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

PHP 相关文章推荐
基于MySQL分区性能的详细介绍
May 02 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
Jun 12 PHP
PHP实现文件下载断点续传详解
Oct 15 PHP
详解PHP数组赋值方法
Nov 07 PHP
thinkPHP模板中函数的使用方法示例
Nov 30 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
Jan 30 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
Apr 10 PHP
Yii2表单事件之Ajax提交实现方法
May 04 PHP
PHP学习记录之数组函数
Jun 01 PHP
PHP fclose函数用法总结
Feb 15 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
Apr 09 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
May 06 PHP
利用php做服务器和web前端的界面进行交互
Oct 31 #PHP
php将服务端的文件读出来显示在web页面实例
Oct 31 #PHP
PDO的安全处理与事物处理方法
Oct 31 #PHP
PHP仿微信发红包领红包效果
Oct 30 #PHP
PHPCMS忘记后台密码的解决办法
Oct 30 #PHP
php set_include_path函数设置 include_path 配置选项
Oct 30 #PHP
php 截取utf-8格式的字符串实例代码
Oct 30 #PHP
You might like
php实现阿拉伯数字和罗马数字相互转换的方法
2015/04/17 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
2017/08/04 PHP
JS location几个方法小姐
2008/07/09 Javascript
基于jQuery的弹出消息插件 DivAlert之旅(一)
2010/04/01 Javascript
原创javascript小游戏实现代码
2010/08/19 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
2013/07/03 Javascript
javascript中CheckBox全选终极方案
2015/05/20 Javascript
JavaScript中的条件判断语句使用详解
2015/06/03 Javascript
JavaScript返回上一页的三种方法及区别介绍
2015/07/04 Javascript
javascript实现全角半角检测的方法
2015/07/23 Javascript
初步了解javascript面向对象
2015/11/09 Javascript
浅析JS操作DOM的一些常用方法
2016/05/13 Javascript
smartupload实现文件上传时获取表单数据(推荐)
2016/12/12 Javascript
解决nodejs中使用http请求返回值为html时乱码的问题
2017/02/18 NodeJs
vue2.0 自定义 饼状图 (Echarts)组件的方法
2018/03/02 Javascript
JS实现拼图游戏
2021/01/29 Javascript
JS实现公告上线滚动效果
2021/01/10 Javascript
python 文件操作删除某行的实例
2017/09/04 Python
python学习必备知识汇总
2017/09/08 Python
python OpenCV学习笔记直方图反向投影的实现
2018/02/07 Python
tensorflow训练中出现nan问题的解决
2018/02/10 Python
python笔记_将循环内容在一行输出的方法
2019/08/08 Python
基于python全局设置id 自动化测试元素定位过程解析
2019/09/04 Python
python脚本调用iftop 统计业务应用流量的思路详解
2019/10/11 Python
python 3.8.3 安装配置图文教程
2020/05/21 Python
Pycharm 2020.1 版配置优化的详细教程
2020/08/07 Python
用python实现一个简单的验证码
2020/12/09 Python
美国知名男士服饰品牌:Brooks Brothers(布克兄弟)
2016/08/25 全球购物
夏威夷灵感服装及配饰:Reyn Spooner
2018/09/18 全球购物
Famous Footwear加拿大:美国多品牌运动休闲鞋店
2018/12/05 全球购物
什么是SCM(软件配置管理)
2014/08/16 面试题
js实现弹框效果
2021/03/24 Javascript
宝宝周岁宴答谢词
2014/01/26 职场文书
继承权公证书
2014/04/09 职场文书
音乐节策划方案
2014/06/09 职场文书
优秀党务工作者先进事迹材料
2014/12/25 职场文书