登陆状态持久化

前几天,一直都想实现登陆持久化功能,于是到网上各种翻阅资料。最终总结实现登陆持久化无非那么几种方法。

1.将信息存入session

2.将信息存入cookie,(可以采用MD5加密)

3.拉长cookie的有效时间

第一种操作最简单,也很容易实现,但是有个缺点:就是它的持久化只是在一次会话里面,也就是说当你关掉页面重新开启页面的时候,发觉信息已经被清除干净了。这样做显然不合适,第二种是用户名和密码(经过加密后)存入cookie,每次对cookie的信息进行校验,实现持久化。这也不是很好的办法,毕竟把密码等重要信息存进cookie,也是不安全的。

我要讲的就是第三种方法,也是我觉得可行性最高的方法。

session(会话)有一个sessionid这样一个属性,用来标识每一个用户。而sessionid实际上还是存在cookie里面的。所以只要拉长sesiionid在cookie的存活时间就可以实现持久化了。

在struts2中访问session或者cookie有两种方法:

1.伪访问:实现SessionAware接口(获得session)

       CookiesAware接口(获得cookie)

       CookieProvider接口(写入cookie)

再者你如果要访问Cookie还得在struts2里面配置拦截器。

<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="cookieProvider"></interceptor-ref>
<interceptor-ref name="cookie">
    <param name="cookiesName">ValidationMsg</param>
    <param name="cookiesValue">*</param>
</interceptor-ref>

但是这种方法是无法获取sessionid,为什么呢?

因为它是伪访问,通过这种方法返回的是一个Map.什么是Map?就是值对,它是用这样方式去模拟HttpServletSession。

获取不到那怎么呢?

只能以耦合性为代价了,去使用HttpServletAPI.

我们只需要这样写:

HttpServletResponse response = ServletActionContext.getResponse();
HttpServletRequest request =ServletActionContext.getRequest();
HttpSession session =request.getSession();
session.setAttribute("userName",user.getUserName());
String sessionid = session.getId();
Cookie cookie = new Cookie("JSESSIONID",sessionid);//注意key值必须和原来一样,否则服务器无法标识用户
cookie.setMaxAge(1*1800); // 设置cookie的生命周期1800s
cookie.setPath("/");
response.addCookie(cookie);  //cookie添加完毕

 这样就可以利用cookie的持久化,去实现关闭页面下次打开还可以自动登陆了。

登陆状态持久化

时间: 2024-10-10 22:28:23

登陆状态持久化的相关文章

IOS开发之记录用户登陆状态

今天要说的是如何记录我们用户的登陆状态.例如微信,QQ等,在用户登陆后,关闭应用在打开就直接登陆了.那么我们在App开发中如何记录用户的登陆状态呢?之前在用PHP或者Java写B/S结构的东西的时候,我们用Session来存储用户的登陆信息,Session是存在服务器上仅在一次回话中有效,如果要记录用户的登陆状态,那么会用到一个叫Cookie的东西.Cookie和Session不同,Cookie是存在用户本地的一个文件,Cookie中存的就是用户的登陆信息,当用户在此登陆时,自动从Cookie中

IOS 记录用户登陆状态 第二次免登陆

NSUserDefault是苹果提供给我们用来存储用户的登陆信息的持久化类.下面用实例看下记录登陆状态的过程 首先创建用于存取用户信息的方法类 HRAccountTool.h: #import <Foundation/Foundation.h> @interface HRAccountTool : NSObject /** * 存储账号信息 * @param account 需要存储的账号信息:第一个值为用户名:第二个值为密码 */ + (void)saveAccount:(NSArray *

用户登陆状态,ios开发用户登陆

IOS开发之记录用户登陆状态,ios开发用户登陆 上一篇博客中提到了用CoreData来进行数据的持久 化,CoreData的配置和使用步骤还是挺复杂的.但熟悉CoreData的使用流程后,CoreData还是蛮好用的.今天要说的是如何记录我们用户 的登陆状态.例如微信,QQ等,在用户登陆后,关闭应用在打开就直接登陆了.那么我们在App开发中如何记录用户的登陆状态呢?之前在用PHP或者 Java写B/S结构的东西的时候,我们用Session来存储用户的登陆信息,Session是存在服务器上仅在一

IOS开发之记录用户登陆状态,ios开发用户登陆

IOS开发之记录用户登陆状态,ios开发用户登陆 上一篇博客中提到了用CoreData来进行数据的持久化,CoreData的配置和使用步骤还是挺复杂的.但熟悉CoreData的使用流程后,CoreData还是蛮好用的.今天要说的是如何记录我们用户的登陆状态.例如微信,QQ等,在用户登陆后,关闭应用在打开就直接登陆了.那么我们在App开发中如何记录用户的登陆状态呢?之前在用PHP或者Java写B/S结构的东西的时候,我们用Session来存储用户的登陆信息,Session是存在服务器上仅在一次回话

Rhythmk 学习 Hibernate 02 - Hibernate 之 瞬时状态 离线状态 持久化状态 三状态

by:rhythmk.cnblogs.com 1.Hibernate 三种状态: 1.1.三种定义(个人理解,不一定准确):  瞬时状态(transient):    不被session接管,且不存在数据库中的对象的状态,类似于新New一个对象  离线状态 (detached):    数据库中存在而不被session接管  持久化状态(persistent): 对象被session管理且数据库中存在此对象 1.2. 状态之间转换关系图 2 .状态转换以及Hibernate数据库执行过程详解:

如何维持APP用户的登陆状态

一.一种方式 原文链接:http://ciniao.legu.cc/appcan/article_54.html 这个问题太过于常见,也过于简单,以至于大部分开发者根本没有关注过这个问题,我根据和我沟通的开发者中,总结出来常用的方法有以下几种: (个人觉得不简单么) 一:服务端默认的session 这种方式最大的优点是服务端不用增加任何代码,但APP与网站不同,通常情况下,我们会希望APP的登陆状态能维持数天,甚至数月之久,大部分的服务端程序,都会在进程重启时或客户端多久不活动时,将sessio

通过SharePreference来存储登陆状态和账号信息

2014-07-0212:00:19 package com.example.getshareperference; import java.util.Map; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; //封装SharedPreferences类 public class SharePrefe

python如何保持登陆状态的简单现实

洒家不是程序员只是分享一个思路,前段时间洒家无意中尝试上如何用python保持手工登陆网站的 状态,当登陆某个论坛时,是用cookie值来识别用户身份的,只要这个cookie值没有失效,就可以 长期登陆状态. 用python保持登陆状态的思路: 手工登陆论坛 用火狐抓包插件httofox获取cookie值 python传送得到的cookie值 以下是python实现代码 import urllib,urllib2 cj = '获取的cookie' url = '请求页面' user = 'Moz

自动登录、记住我(保存登陆状态)实现

自动登录.记住我(保存登陆状态)实现:保存在客户端不能用session,可以用cookies保存 实现方式:第一种方法:可以把SessionId(GUID)放到cookies中,但 这样为了让用户下次访问我们网站时,知道这 个sessionId对应的是哪一个用户,我们还要在 数据库中建张表.表字段:主键,UserId  SessionId  时间 缺点:不能在两台机器上同时保存 第二种方法:把UserId放cookies中  密码(加密)相对于第一种方法优点:多台机器可以保存缺点:不安全,密码放