?? 一、什么是用户自动登录? ?? 对于我们的网站向已注册用户提供某些专门的服务,比如网上购物、在线下载、收费浏览等等,就会要求用户在使用这些服务之前进入登录页面,输入用户名和密码,并进行验证。 ??? 如果用户经常访问我们的网站,假如每天都访问一次,或者好几次,那么用户每次都重复这些登录操作就会感到相当厌烦。通过一些简单的技术手段,我们可以让网站“记住”那些在曾经登录过的用户。当该用户下次再来访问的时候,网站可以识别该用户,并为其自动完成登录过程。 二、基本思路 ?? 作为网站的编写者,我们无从知道坐在电脑前的那个人是谁。我们能够知道的是,访问网站的是哪一台电脑——这一点可以通过Cookie实现。因此,对用户的识别实际上就是对客户端电脑的识别。 ?简单的说,当用户第一次登录网站的时候,网站向客户端发送一个包含有用户名的Cookie。当用户在之后的某个时候再次访问,浏览器就会向网站服务器回送这个Cookie,于是,我们可以从这个Cookie中读取到用户名,然后调用登录的方法,从而实现自动为用户登录。 三、防止欺骗 ?? Cookie只是一个普通的文本文件,那里面包含的字符串可以直接用记事本打开并进行编辑。因此任何人在任何电脑上都可以伪造一个包含有他人用户名 的 Cookie,从而实现对他人身份的冒用。要解决这个问题,就要在Cookie中附加一项信息,这个信息需要具有以下特性:1、和该用户一一对应;2、伪 造难度大。这些内容和用户名一起,以Cookie的形式发送给用户的浏览器。并且,服务器必须能够记住这项内容,以便用户再次访问的时候进行核对。 ?? 理论上,可以使用该用户的密码。密码具备了前述的两个特点。但是因为Cookie本身未经加密,保存于其中的密码(应该加密)可以被任何人看到,因此这个方法极不安全。 ?? 另一种可以加以利用的信息是用户访问时的Session id。因为Session id是一个由系统随机产生的、无规律的、长度较长的字符串,因此它很难被伪造。要把它和用户对应起来,我们需要在数据库中添加一个表,这个表至少有两个字 段,一个是用户名,一个是Session id。当用户首次登录的时候,我们把当前的Session id和用户名分别用Cookie发送给用户,同时,把这两项作为一条记录插入数据库。这样,当用户再次访问的时候,服务器就可以读取客户端发来的这两个 Cookie,并且用它们的值和数据库中的记录比对。如果在数据库中找到了相应记录,就说明这台电脑的确是该用户上次登录时使用的电脑,进而可以为该用户自动登录。 四、实现 1、在登录页面中添加一个复选框,让用户选择是否愿意在一定时间内实现自动登陆,例如两周。 代码: 2、在负责处理登录过程的Servlet中,判断用户是否选择了该复选框。如果是,则执行这两个操作:向用户发送两个Cookie,以及向数据库写入一条相应的记录。 代码: if (autologin.equals("on")) { ?? sessionid = session.getId(); // 取得当前的session id ?? // 在数据库中插入相应记录 3、实现自动登录。因为用户下次访问的时候,可能直接访问网站的任何页面(例如通过收藏夹),而不一定是首页或者登录页面,所以我们需要用Filter拦截到达该网站的所有请求,并执行自动登录。 public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { ?? // 如果session中没有user对象,则创建一个。 ?? // 如果user对象的username为"",表示用户未登录。则执行自动登录过程。 ??? if (isAutoLogin) { 4、注销。只有当用户在上次访问时,未经注销就离开网站,我们才能在该用户下次访问时执行自动登录。如果用户显式的执行了注销操作,那就表示该用户 不希望我们记住他。我们需要在执行注销操作的Servlet中,从数据库中删除相应记录。这样,下次用户访问的时候就不会执行自动登录了。 五、改进 用户可能为了方便,自行修改Cookie中的有效期,从而达到长期自动登录的目的。对某些存有敏感信息的网站来说,这样做并不安全。当用户长时间没有使用他的电脑,或者将电脑遗弃、转让了,而保存于其中的Cookie仍然是有效的,这就为用户和网站带来潜在的风险。 要解决这个问题,我们可以在数据库中增加一个字段,用以记录自动登录的过期日。这样,是否执行自动登录就不再以客户端的Cookie有效期为准,而 是以服务器端数据库中的信息为准。当我们想要调整用户自动登录的有效期的时候,只需要修改数据库中相应的日期字段即可,因而这一过程变得更加安全。 |
详细解决方案
j2ee cookie 兑现自动登录
热度:37 发布时间:2016-04-22 00:37:31.0
相关解决方案
- 为啥session id 是保存在 客户端的 cookie 里的啊
- java EL Cookie 有关问题
- cookie 在liunx上获取不到
- jsp cookie 封存密码 用浏览器清除cookie 后再刷新发先cookie不空
- j2ee 中怎样实现上传头像后按一定比例截取解决方案
- 向左走(J2EE)向右走(Andorid)如果是您(前辈!)你选哪一个?解决方法
- 南京JAVA /j2ee 软件工程师社区 技术交流/薪资.(限已工作人员)
- 向左走(J2EE)向右走(Andorid)如果是你(前辈!)你选哪一个
- 寻SSH(J2EE)技术转J2ME一些建议解决方案
- j2ee 小女子不才,选用ssh框架做毕业设计,遇到有关问题颇多,望有贤之士help me,呀,快要答辩了
- JEECG(J2EE Code Generation) 基于代码生成器J2EE智能开发框架 公布新版本通知
- use interceptor to log informations (J2EE 六 利用interceptor 打Log)
- J2EE 惯用JAR包介绍
- 【转】eclipse ide for java ee developers 开发环境筹建(j2ee)
- J2EE、J2SE、J2ME的容易区别
- J2SE J2EE J2ME的差异 (转)
- 学厌了就得回头见见这几个概念J2SE J2EE J2ME JDK JRE SDK
- 有点什么技术架构?J2EE?NET?求大侠解决
- 万佛归宗——从 VB.NET 到 C# 的语言转换工具!从 Java/J2EE 到 C# 的自动转换工具!解决方案
- cookie 如何保存和获取 剩余时间
- ASP的7个对象Session、Application、Cookie、Response、Request、Server不知是什么意思,经常混,如何用,多谢
- session 和 cookie 的有关问题
- Session Cookie without Secure flag set,该怎么解决
- Application/Session/ViewState/Cache/cookie 这几个对象可以存储的最大长度是多少,默认是多少?解决方案
- asp.net cookie 中文乱码解决方法
- 高分放送-求asp.net cookie 中文乱码有关问题
- 菜鸟 问一下 Cookie 和Session的有关问题
- cookie 为什么总也不过期解决方法
- 请问 cookie 跨域有关问题
- 请问:cookie 紧急有关问题