html怎么登陆了才能阅读,login.html 记住登录功能

用户登录信息开始是利用session保存,短时间内通过判断session可以不用登录,但是时间长或者在关闭浏览器重启之后,还是需要登录操作。

大多网站都会利用有效时长为15-30天的cookie保存用户名和密码,实现“记住我”的功能。

在实现过程中,重新学习了解了cookie和session机制:session、cookie与“记住我的登录状态”的功能的实现

Cookie的机制

Cookie是浏览器(User Agent)访问一些网站后,这些网站存放在***端的一组数据,用于使网站等跟踪用户,实现用户自定义功能。

Cookie的Domain和Path属性标识了这个Cookie是哪一个网站发送给浏览器的;Cookie的Expires属性标识了Cookie的有 效时间,当Cookie的有效时间过了之后,这些数据就被自动删除了。

如果不设置过期时间,则表示这个Cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,Cookie就消失了。这种生命期为浏览会话期的

Cookie被称为会话Cookie。会话Cookie一般不保存在硬盘上而是保存在内存里。如果设置了过期时间,浏览器就会把Cookie保存到硬盘

上,关闭后再次打开浏览器,这些Cookie依然有效直到超过设定的过期时间。存储在硬盘上的Cookie可以在不同的浏览器进程间共享,比如两个IE窗

口。而对于保存在内存的Cookie,不同的浏览器有不同的处理方式。

Session的机制

Session是存放在服务器端的类似于HashTable结构(每一种Web开发技术的实现可能不一样,下文直接称之为HashTable)来存放用户数据,当浏览器第一次发送请求时,服务器自动生成了一个HashTable和一个Session

ID用来唯一标识这个HashTable,并将其通过响应发送到浏览器。当浏览器第二次发送请求,会将前一次服务器响应中的Session

ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session

ID进行对比,找到这个用户对应的HashTable。

一般情况下,服务器会在一定时间内(默认20分钟)保存这个HashTable,过了时间限制,就会销毁这个HashTable。在销毁之前,程序员可以

将用户的一些数据以Key和Value的形式暂时存放在这个HashTable中。当然,也有使用数据库将这个HashTable序列化后保存起来的,这

样的好处是没了时间的限制,坏处是随着时间的增加,这个数据库会急速膨胀,特别是访问量增加的时候。一般还是采取前一种方式,以减轻服务器压力。

这篇博客里面还写到 实现“记住我的登录状态”的功能方法,简言之,就是对首先对session进行用户信息赋值,检测session,失效后,利用cookie对其赋值;

在实现过程中,根据网上一些代码贴,整理出以下代码:另外可以参考PHP 登录记住密码实现思路

在登录login.php页面中,进行表单设置:<?php

session_start();

?>

" placeholder="用户名">

记住我

登录

login_chk.php页面用于验证登录页面表单信息,并创建cookie:<?php

header("Content-type:text/html;charset=gb2312");

session_start();

include_once("conn/conn.php");  //加载数据库连接文件

error_reporting(0);

if(empty($_POST['username']) or empty($_POST['pass'])){

echo "";

}else{

$username=$_POST['username'];

$pass=$_POST['pass'];

$password = md5($pass);

$remember = $_POST['remember'];

//执行查询操作

$testrst = sqlsrv_query($conn, "select * from Employee where name like '$username' or number like '$username'");

//如果用户选择了,记录登录状态就把用户名和加了密的密码放到cookie里面

if(!empty($remember)){

setcookie("username", $username, time()+3600*24*30);

setcookie("password", $pass, time()+3600*24*30);

}

if(sqlsrv_has_rows($testrst)){

$rst = sqlsrv_query($conn, "select * from Employee where (name like '$username' or number like '$username') and pwd = '$password'");

//判断登录用户名和密码是否正确

if(sqlsrv_has_rows($rst)){

$adminrow = sqlsrv_fetch_array($rst);

$userwhethe = 0;

$_SESSION['id']=$adminrow[0];

$_SESSION['number']=$adminrow[1];

$_SESSION['name']=$adminrow[2];

if($username == $adminrow[1]){

$_SESSION['type'] = 1;

}else{

$_SESSION['type'] = 2;

}

echo "";

}else{

echo "";

}

}else{

echo "";

}

}

?>

menu.php以及其他功能页面都会检查一遍session:<?php

session_start();

include_once("conn/conn.php");

error_reporting(0);

//判断当前用户是否为登录状态

if(empty($_SESSION['name']) and empty($_SESSION['id'])){

echo "";

}else{

}

?>

至于检验sessionf,失效利用cookie进行赋值的操作,在index1.php(index的检查页)中实现:<?php

session_start();

//检查一下session是不是为空

if(empty($_SESSION['username'])){

if(empty($_COOKIE['username']) || empty($_COOKIE['password'])){

header("location:login.php");

}else{

$_SESSION['name'] = $_COOKIE['username'];

header("location:menu.php");

}

}

?>

另外,考虑到用户有退出系统或者注销再登录的需要,设置了退出页面logout.php:<?php

session_start();

unset($_SESSION['username']);

unset($_SESSION['password']);

setcookie('username','',0);

setcookie('password','',0);

header("location:index.php");

?>

实现后,使用流畅。但对密码的cookie和session保存感觉不是很恰当,在用户登录界面也没有对密码表单进行值得默认保存,这个方面的功能还需要完善。

转自:https://www.cnblogs.com/hhccdf/p/5597043.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值