- 浏览: 1031588 次
- 性别:
- 来自: 郑州
文章分类
- 全部博客 (605)
- 数据挖掘 (22)
- spring (40)
- 工具使用 (39)
- java (137)
- JavaScript (40)
- webwork (12)
- web (120)
- 资源 (7)
- SSH (5)
- oracle (20)
- J2ME (1)
- 环境配置 (37)
- 项目管理 (29)
- mysql (14)
- struts (4)
- 项目总结 (27)
- ibatis学习 (33)
- 学习计划 (2)
- 缓存 (7)
- 重构 (3)
- Android (1)
- jquery (12)
- UML (3)
- 用户体验 (4)
- 习惯 (7)
- sakai (1)
- urlrewrite (4)
- rss (5)
- C plus plus (5)
- 算法 (5)
- 海量数据处理 (7)
- office(word、excel) (1)
- 面试题 (3)
- solr (8)
- 大数据 (2)
最新评论
-
hujin19861102:
截图看不见,最后一个webwrok的配置看不见
Ext+Webwork+Json 实现分页表格查询效果 -
蜗牛笔:
弱弱的问一句,要是分出来的词在词典中没有,那么两部分的pos- ...
ICTCLAS 中科院分词系统 -
weipeng1986:
授人予鱼不如授人予鱼,我想问你的是你是怎么总结的。比如第四种情 ...
JAVA中字符串连接效率的测试 -
xiaoqiang2008:
执行两次的原因是什么,好像楼主没弄清楚啊!是不是在web.xm ...
关于Spring中用quartz定时器在定时到达时同时执行两次的问题 -
Kent_Mu:
...
ibatis-dynamic的用法
一、什么是用户自动登录?
对于我们的网站向已注册用户提供某些专门的服务,比如网上购物、在线下载、收费浏览等等,就会要求用户在使用这些服务之前进入登录页面,输入用户名和密码,并进行验证。
如果用户经常访问我们的网站,假如每天都访问一次,或者好几次,那么用户每次都重复这些登录操作就会感到相当厌烦。通过一些简单的技术手段,我们可以让网站“记住”那些在曾经登录过的用户。当该用户下次再来访问的时候,网站可以识别该用户,并为其自动完成登录过程。
二、基本思路
作为网站的编写者,我们无从知道坐在电脑前的那个人是谁。我们能够知道的是,访问网站的是哪一台电脑——这一点可以通过Cookie实现。因此,对用户的识别实际上就是对客户端电脑的识别。
简单的说,当用户第一次登录网站的时候,网站向客户端发送一个包含有用户名的Cookie。当用户在之后的某个时候再次访问,浏览器就会向网站服务器回送这个Cookie,于是,我们可以从这个Cookie中读取到用户名,然后调用登录的方法,从而实现自动为用户登录。
三、防止欺骗
Cookie只是一个普通的文本文件,那里面包含的字符串可以直接用记事本打开并进行编辑。因此任何人在任何电脑上都可以伪造一个包含有他人用户名 的 Cookie,从而实现对他人身份的冒用。要解决这个问题,就要在Cookie中附加一项信息,这个信息需要具有以下特性:1、和该用户一一对应;2、伪 造难度大。这些内容和用户名一起,以Cookie的形式发送给用户的浏览器。并且,服务器必须能够记住这项内容,以便用户再次访问的时候进行核对。
理论上,可以使用该用户的密码。密码具备了前述的两个特点。但是因为Cookie本身未经加密,保存于其中的密码(应该加密)可以被任何人看到,因此这个方法极不安全。
另一种可以加以利用的信息是用户访问时的Session id。因为Session id是一个由系统随机产生的、无规律的、长度较长的字符串,因此它很难被伪造。要把它和用户对应起来,我们需要在数据库中添加一个表,这个表至少有两个字 段,一个是用户名,一个是Session id。当用户首次登录的时候,我们把当前的Session id和用户名分别用Cookie发送给用户,同时,把这两项作为一条记录插入数据库。这样,当用户再次访问的时候,服务器就可以读取客户端发来的这两个 Cookie,并且用它们的值和数据库中的记录比对。如果在数据库中找到了相应记录,就说明这台电脑的确是该用户上次登录时使用的电脑,进而可以为该用户自动登录。
四、实现
1、在登录页面中添加一个复选框,让用户选择是否愿意在一定时间内实现自动登陆,例如两周。
代码:
<input type="checkbox" name="autologin">两周内自动登录
2、在负责处理登录过程的Servlet中,判断用户是否选择了该复选框。如果是,则执行这两个操作:向用户发送两个Cookie,以及向数据库写入一条相应的记录。
代码:
Cookie ckUsername, ckSessionid;
if (autologin.equals("on")) {
// 如果用户选择了“两周内自动登录”,则向用户发送两个cookie。
// 一个cookie记录用户名,另一个记录唯一的验证码,
// 并将此验证码写入数据库,以备用户返回时查询。(防止伪造cookie)
ckUsername = new Cookie("autoLoginUser", user.getUsername()); // user是代表用户的bean
ckUsername.setMaxAge(60 * 60 * 24 * 14); //设置Cookie有效期为14天
res.addCookie(ckUsername);
sessionid = session.getId(); // 取得当前的session id
ckSessionid = new Cookie("sessionid", sessionid);
ckSessionid.setMaxAge(60 * 60 * 24 * 14);
res.addCookie(ckSessionid);
// 在数据库中插入相应记录
userSessionDAO.insertUserSession(user, sessionid);
}
3、实现自动登录。因为用户下次访问的时候,可能直接访问网站的任何页面(例如通过收藏夹),而不一定是首页或者登录页面,所以我们需要用Filter拦截到达该网站的所有请求,并执行自动登录。
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpSession session = request.getSession(true);
String username;
String sessionid; // 此sessionid是上次用户登录时保存于用户端的识别码,用于用户后续访问的自动登录。不是本次访问的session id。
Cookie[] cookies;
CookieManager cm = new CookieManager(); // CookieManager是一个自定义的类,用于从Cookie数组中查找并返回指定名称的Cookie值。
boolean isAutoLogin;
// 如果session中没有user对象,则创建一个。
User user = (User) session.getAttribute("user");
if (user == null) {
user = new User(); // 此时user中的username属性为"",表示用户未登录。
}
// 如果user对象的username为"",表示用户未登录。则执行自动登录过程。
// 否则不自动登录。
if (user.getUsername().equals("")) {
// 检查用户浏览器是否发送了上次登录的用户名和sessionid,
// 如果是,则为用户自动登陆。
cookies = request.getCookies();
username = cm.getCookieValue(cookies, "autoLoginUser");
sessionid = cm.getCookieValue(cookies, "sessionid");
isAutoLogin = userSessionDAO.getAutoLoginState(username, sessionid); // 如果在数据库中找到了相应记录,则说明可以自动登录。
if (isAutoLogin) {
user.setUsername(username);
user.setNickname(DBUtil.getNickName(username));
session.setAttribute("user", user); // 将user bean添加到session中。
}
}
chain.doFilter(req, resp);
}
4、注销。只有当用户在上次访问时,未经注销就离开网站,我们才能在该用户下次访问时执行自动登录。如果用户显式的执行了注销操作,那就表示该用户 不希望我们记住他。我们需要在执行注销操作的Servlet中,从数据库中删除相应记录。这样,下次用户访问的时候就不会执行自动登录了。
五、改进
用户可能为了方便,自行修改Cookie中的有效期,从而达到长期自动登录的目的。对某些存有敏感信息的网站来说,这样做并不安全。当用户长时间没有使用他的电脑,或者将电脑遗弃、转让了,而保存于其中的Cookie仍然是有效的,这就为用户和网站带来潜在的风险。
要解决这个问题,我们可以在数据库中增加一个字段,用以记录自动登录的过期日。这样,是否执行自动登录就不再以客户端的Cookie有效期为准,而 是以服务器端数据库中的信息为准。当我们想要调整用户自动登录的有效期的时候,只需要修改数据库中相应的日期字段即可,因而这一过程变得更加安全。
转载自: http://kaowww153.iteye.com/blog/626111
发表评论
-
firefox 兼容两个小细节
2012-12-29 10:38 13031. 火狐下radio无法选中问题 描述: 当JS ... -
专业的网页测试工具 YSLOW
2012-11-07 19:41 891http://guangqiang.iteye.com/blo ... -
freemarker 静态化网页
2012-11-07 19:39 1168freemarker的作用: MVC框架 ... -
基本CSS选择器,复合选择器,后代选择器
2012-11-02 13:23 1018http://gaterking.blog.51cto. ... -
webwork <ww:url> 转 jstl <c:url>标签
2012-11-02 11:06 2161项目之前分页组件一直使用的是 项目组定义的 公用分页,其中引用 ... -
CSS 图片拼合生成器
2012-11-02 10:53 1807CSS 图片拼合生成器在线 工具(已测试使用,基本满足网站对s ... -
可编辑的div 插入文本与图片(要求光标定位插入)
2012-09-11 17:39 1922http://jianzhong5137.blog.163.c ... -
jsp include 包含的区别
2012-05-14 16:39 1027c.jsp <!DOCTYPE html ... -
mysql + tomcat 连接池配置问题
2012-04-18 21:23 985javax.naming.NameNotFoundExcept ... -
tomcat启动异常
2012-03-28 16:23 1409ERROR 2012-03-28 16:00:41,34 ... -
Java路径问题最终解决方案
2012-03-08 18:21 989http://blog.csdn.net/shendl/art ... -
怎么避免浏览器缓存静态文件(js/css/img)
2012-03-08 18:16 0怎么通过程序删除清空客户端的浏览器缓存 对于动态文件, ... -
使用HTMLparser解析HTML
2012-03-06 09:27 1387http://express.ruanko.com/ru ... -
IE 6下 a javascript:void(0)问题
2011-12-16 19:04 1304原文地址:http://blog.csdn.net/lee ... -
jquery treeview
2011-12-13 14:59 2502<link rel="stylesheet&q ... -
显示数据加载中
2011-12-13 14:32 1093在加载比较慢的页面(如含有很多节点的树)中,引入公用文件,公用 ... -
jquery ui dialog 遮拦 select的解决方法
2011-09-30 09:23 3251<script type="text/java ... -
CSS Sprites合并多个小图片
2011-09-29 11:31 1152这种方法看似繁琐,但却是非常有实用价值的。 首先,CS ... -
form表单只提交值,而不进行页面跳转(转)
2011-09-29 11:19 21492源自: http://trinea.iteye.com ... -
Spring 配置中的 default-lazy-init="false"
2011-09-26 18:03 1826Spring 配置中的 default-lazy-init=& ...
相关推荐
jsp之Cookie自动登录类似于QQ自动登录一样,有助于用户在下载运行的时候更加方便,简洁
纯JSP演示Cookie自动登录(完整工程。主要实现勾选自动登录后, 哪怕服务器重启后session丢失,靠客户端COOKIE仍然正常登录并刷新COOKIE。点退出登录后COOKIE失效。 现为WEB,可改造为提供android 和ios下的...
cookie自动登录认证
安全简洁的javaweb代码,session+cookie自动登录
PHP实验第11章Cookie自动登录.docx
专业的判断用户名或密码自动登录采用cookie技术 大家共享! 专业的cookie使用!自动登录判断 专业的cookie使用!自动登录判断 专业的cookie使用!自动登录判断
COOKIE实现自动登录,666666666666666666666666666666666
本文实例为大家分享了jsp cookie+session实现简易自动登录的具体代码,供大家参考,具体内容如下 关闭浏览器只会使存储在客户端浏览器内存中的session cookie失效,不会使服务器端的session对象失效。 如果设置了...
1.代码是完整的导入到 myEclipse 中就可以使用 2.实现struts cookie 记住两周 自动登录功能 3.访问地址:http://127.0.0.1:8080/cookie/index.jsp 4.系统默认有两个账户 在 UserDao 中可以查到
iOS Cookie WebView 自动登录
基于cookie的单点登录示例代码
strut2使用cookie实现自动登录,其中用到了过滤器来实现自动登录
NULL 博文链接:https://960432397.iteye.com/blog/1677963
JAVA通过Session和Cookie实现网站自动登录的技术
百度COOKIE浏览器,导入百度COOKIE账号,可自动登录网页百度。
2020/1/5更新,所需积分6改为所需积分0 使用python+selenium实现绕过验证码自动登录并完成网页动作完整代码
当用户第一次登录某个网站时,用户可以选择用户名及密码保存的有效期时间(一天,一周,一年等等),用户在有效期内再次访问该网站时,不用再次输入用户名及密码,即可自动登录访问网站
java cookie 读写,记住密码 自动登录