现在的网站基本上都有保存密码并自动登录的功能, 那么密码到底保存在哪里呢? 你会发现, 同一个网站, 如果换一台电脑或者换一个浏览器那就需要重新输入用户名和密码, 从这里可以看出, 密码是保存在浏览器的. 今天就来分析一下博客园的登录并自己写一个demo. 密码是保存在浏览器的c ...
现在的网站基本上都有保存密码并自动登录的功能, 那么密码到底保存在哪里呢? 你会发现, 同一个网站, 如果换一台电脑或者换一个浏览器那就需要重新输入用户名和密码, 从这里可以看出, 密码是保存在浏览器的. 今天就来分析一下博客园的登录并自己写一个demo. 密码是保存在浏览器的cookie中的, 那什么叫cookie呢? w3cshool中有这样的定义: cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。是的, 也就是说, 只要浏览器访问服务器并且cookie是存在的(当然, 路径有效才行 ), 浏览器就会携带cookie到服务器. 这是一种自发的行为, 并不需要设置. 就好像你每天出门一定会带手机一样, 并不需要别人提醒你.
好了, 进入正题. 看一下博客园是怎么保存密码的. 假如我没有登录过博客园, 打开到博客园的登录界面, 然后再浏览器中查看一下关于博客园的cookie, 可以看的这样的:
有3个cookie,分别是这样的3个: 并没有关于用户名密码的cookie, 嘿嘿, 因为我此时根本没有登录. 好了, 现在登录
开始我并没有勾选下次自动登录的选项, 登录之后重定向到首页. 在开发者工具的network中看一下
可以看到, 多了一个.CNBlogsCookie的请求cookie, 咦咦咦, 刚才没有的啊, 现在就有了, 于是我猜测这就是用户名和密码的cookie, 这只是暂时的一个猜测. 在内容设置中看一下关于这个cookie更详细的信息
刚才总共3个, 现在总共5个, 比刚才多了2个, 看一下多的2个
另外一个是这样的:
可以看到, 2个cookie都是关闭浏览器时过期, 现在关闭浏览器? 不不不, 先看一下哪个保存着登录信息, 先把SERVERID这个cookie删除, 看一下是否还保持着登录状态. 试一下你会发现此时仍保持登录状态, 但是如果把.CNBlogsCookie这个cookie删掉, 你会发现'掉线'了. 由此可以说明登录信息保存在.CNBlogsCookie这个cookie中, 啊嘞, 我为什么要说登录信息呢? 刚才不是说的用户名密码么? 登录信息不就是指的用户名和密码吗? 我觉得不一定要把密码存到cookie中, 可以把一串和密码相关的字符串存到cookie中, 在进行cookie自动登录时, 在数据库中查询用户名和这个字符串, 在表单提交时, 查询用户名和密码, 个人觉得这样更安全. 如果是把用户名和密码保存在了cookie中, 那么就算销毁session退出登录, 下次登录时, 在登录页面浏览器应该自动填写用户名和密码才对(毕竟cookie里面有啊). 就博客园来说, 并不是这样的, 可能你会反驳: "我明明退出登录下次再登录时用户名和密码就在那儿啊.", 其实这并不是cookie的功能, 而是浏览器自己帮你做的, 现在的浏览器一般都有个的功能, 好吧, 这个我想这也算个cookie, 不过此cookie非彼cookie, 呃, 有点混乱, 我也不确定这个功能算不算cookie. 总之, 关闭这个功能, 然会退出登录再打开博客园你会发现登录信息是没有的, 所以通过分析我觉得cookie中不一定保存了密码.
那么这个cookie是服务器什么时候传给浏览器的, 上面看到的是request cookie, 那么服务器是什么时候response的, 登录是ajax请求登录的, 你可以用浏览器打断点看一下, 可以发现.CNBlogsCookie是登录请求时response回来的, 如下图
好了, 现在也知道登录信息保存在哪里了, 现在关闭浏览器再打开, 你会发现此时登录状态已经没有了, 因为保存登录信息的cookie已经消失了, 关闭浏览器即代表结束一次会话(销毁session). 嗯, 到这里我们基本知道博客园是怎么保存密码的(可能并没有把密码保存在cookie中, 可能只是保存了一个与密码相关的字符串, 也可能保存的是经过加密的密码), 只是没有将cookie保存在客户端硬盘中而已(没有勾选下次自动登录), 那么是怎么实现自动登录呢? 想想cookie的工作原理: 浏览器每次请求服务器, 如果存在cookie, 并且域和路径符合要求, 都会将cookie携带至服务器.(域和路径看上面的图) 所以只要访问该网站, 服务器判断cookie中的值, 然后判断用户是否可以改为登录状态就行了.
所以登录页面勾选下次自动登录就是表示将cookie存到硬盘中, 大概清楚了博客园保存密码并自动登录的方式: 首次登录时将登录信息保存到cookie中, 下次登录时浏览器携带包含登录信息的cookie到服务器校验从而显示自动登录
自己写一个保存密码并自动登录的demo, 两个页面loginUI.jsp和successUI.jsp, loginUI.jsp用于登录, successUI.jsp只有成功登录之后才能访问
loginUI.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>cookie login</title> <script type="text/javascript" src='/images/loading.gif' data-original="js/jquery-1.8.3.min.js"></script> <script type="text/javascript"> function checkCookie(){ //把用户名取出来 var username = getCookie("loginInfo"); $(":text").val(username); } function getCookie(c_name){ if(document.cookie.length > 0){ var coo = document.cookie; var start = coo.indexOf(c_name+"=")+c_name.length+1; var end = coo.indexOf(";", start); if(end == -1) end = coo.length; var cookieValue = decodeURIComponent(coo.substring(start, end)); return cookieValue.split(",")[0]; } } </script> </head> <body onload="checkCookie()"> <form action="cookie_login.action" method="post"> 用户名<input type="text" name="user.username"><br> 密码<input type="password" name="user.password"><br> <input type="submit" value="登录"> </form> </body></html>
海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com
原标题:浅析博客园的保存密码并自动登录, 然后自己写一个demo
关键词:登录
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。