session过期时间设置
SpringBoot2.x设置Session失效时间及失效跳转

SpringBoot2.x设置Session失效时间及失效跳转1 #Session超时时间设置,单位是秒,默认是30分钟2 server.servlet.session.timeout=10然⽽并没有什么⽤,因为SpringBoot在TomcatServletWebServerFactory代码中写了这个1private long getSessionTimeoutInMinutes() {2 Duration sessionTimeout = this.getSession().getTimeout();3return this.isZeroOrLess(sessionTimeout) ? 0L : Math.max(sessionTimeout.toMinutes(), 1L);4 }如果说某些⼈看不懂 Duration 这个类是什么,我不推荐你接着看下去了,因为没有什么帮助。
⒈Session失效后如何跳转到Session失效地址1package cn.coreqi.security.config;23import cn.coreqi.security.Filter.SmsCodeFilter;4import cn.coreqi.security.Filter.ValidateCodeFilter;5import org.springframework.beans.factory.annotation.Autowired;6import org.springframework.context.annotation.Bean;7import org.springframework.context.annotation.Configuration;8import org.springframework.security.config.annotation.web.builders.HttpSecurity;9import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;10import org.springframework.security.crypto.password.NoOpPasswordEncoder;11import org.springframework.security.crypto.password.PasswordEncoder;12import org.springframework.security.web.authentication.AuthenticationFailureHandler;13import org.springframework.security.web.authentication.AuthenticationSuccessHandler;14import ernamePasswordAuthenticationFilter;1516 @Configuration17public class WebSecurityConfig extends WebSecurityConfigurerAdapter {1819 @Autowired20private AuthenticationSuccessHandler coreqiAuthenticationSuccessHandler;2122 @Autowired23private AuthenticationFailureHandler coreqiAuthenticationFailureHandler;2425 @Autowired26private SmsCodeAuthenticationSecurityConfig smsCodeAuthenticationSecurityConfig;2728 @Bean29public PasswordEncoder passwordEncoder(){30return NoOpPasswordEncoder.getInstance();31 }323334 @Override35protected void configure(HttpSecurity http) throws Exception {36 ValidateCodeFilter validateCodeFilter = new ValidateCodeFilter();37 validateCodeFilter.setAuthenticationFailureHandler(coreqiAuthenticationFailureHandler);3839 SmsCodeFilter smsCodeFilter = new SmsCodeFilter();404142//http.httpBasic() //httpBasic登录 BasicAuthenticationFilter43 http.addFilterBefore(smsCodeFilter, UsernamePasswordAuthenticationFilter.class) //加载⽤户名密码过滤器的前⾯44 .addFilterBefore(validateCodeFilter, UsernamePasswordAuthenticationFilter.class) //加载⽤户名密码过滤器的前⾯45 .formLogin() //表单登录 UsernamePasswordAuthenticationFilter46 .loginPage("/coreqi-signIn.html") //指定登录页⾯47//.loginPage("/authentication/require")48 .loginProcessingUrl("/authentication/form") //指定表单提交的地址⽤于替换UsernamePasswordAuthenticationFilter默认的提交地址49 .successHandler(coreqiAuthenticationSuccessHandler) //登录成功以后要⽤我们⾃定义的登录成功处理器,不⽤Spring默认的。
C#如何设置session过期时间

1、操作系统
步骤:开始——〉管理工具——〉Internet信息服务(IIS)管理器——〉网站——〉默认网站——〉
右键“属性”——〉主目录——〉配置——〉选项——〉启用会话状态——〉会话超时(在这儿设置你要的超时时间,单位分钟)。确定即可。
2、应用程序中Session过期时间的设置
document.all["Back"].src="SessionKeeper.asp?RandStr="+Math.random();
//这里的RandStr=Math.random只是为了让每次back.src的值不同,防止同一地址刷新无效的情况
window.setTimeout("keepsession()",900); //每隔900秒调用一下本身
cookieless="false"
timeout="20"
/>
其中默认的mode是InProc类型,这种模式和以前ASP模式一样,就是服务器将Session信息存储在IIS进程当中,当IIS关闭、重起后这些进程信息都会丢失,
但这种模式的性能最高(具体没测,看书上说),这种模式是的默认方式。
由于这种模式出现了故障,当时我的考虑就是由于访问量过大的原因,导致Inetinfo.exe进程崩溃。用户难以登陆以致Session丢值出现故障,
我采用了另外一种Session的存储方式把Session信息存储在进程外。
首先,打开管理工具找到服务,找到名为: State Service的服务,启动它.并且改成自动启动。这时你可以在任务管理器中看到一个
php中实现精确设置session过期时间的方法

php中实现精确设置session过期时间的⽅法⼤多数据情况下我们对于session过期时间使⽤的是默认设置的时间,⽽对于⼀些有特殊要求的情况下我们可以设置⼀下session过期时间。
对此,可以在PHP中,设置php.ini,找到session.gc_maxlifetime = 1440 #(PHP5默认24分钟)这⾥你可以随便设置⼀下过期时间.但是有⼈说设置以后,好象不起作⽤!其实不是不起作⽤,⽽是因为系统默认:session.gc_probability = 1session.gc_divisor = 1000garbage collection 有个概率的,1/1000就是session 1000次才有⼀次被回收。
只要你的访问量⼤了,那就能达到回收的效果.或者你也可以设置⼀下session.gc_divisor 的值,⽐如:session.gc_divisor = 1,这样就能明显的看到SESSION过期的效果了.我们最常⽤的是在php程序中设置,如下例程序所⽰:<?phpif(!isset($_SESSION['last_access'])||(time()-$_SESSION['last_access'])>60)$_SESSION['last_access'] = time();>这样就搞定了,如果要设置已过期的话也可以在程序中实现:<?phpunset($_SESSION['last_access']);// 或 $_SESSION['last_access']='';>session有过期的机制:session.gc_maxlifetime 原来session 过期是⼀个⼩概率的事件,分别使⽤session.gc_probability和session.gc_divisor 来确定运⾏session 中gc 的概率 session.gc_probability和session.gc_divisor的默认值分别为 1和100。
Session的有效期设置

Session的有效期设置⽅式⼀:在web.xml中设置session-config如下:<session-config><session-timeout>2</session-timeout></session-config>即客户端连续两次与服务器交互间隔时间最长为2分钟,2分钟后session.getAttribute()获取的值为空API信息:session.getCreationTime() 获取session的创建时间session.getLastAccessedTime() 获取上次与服务器交互时间session.getMaxInactiveInterval() 获取session最⼤的不活动的间隔时间,以秒为单位120秒。
<!-- 登录状态过滤,可以过滤掉不需要进⾏超时验证的url --><filter><filter-name>loginFilter</filter-name><filter-class>com.software.filter.LoginFilter</filter-class></filter><filter-mapping><filter-name>loginFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!---以上代码指明具体的路径,具体的代码见附录>⽅式⼆:在Tomcat的/conf/web.xml中session-config,默认值为:30分钟<session-config><session-timeout>30</session-timeout></session-config>⽅式三:在Servlet中设置HttpSession session = request.getSession();session.setMaxInactiveInterval(60);//单位为秒说明:1.优先级:Servlet中API设置 > 程序/web.xml设置 > Tomcat/conf/web.xml设置2.若访问服务器session超时(本次访问与上次访问时间间隔⼤于session最⼤的不活动的间隔时间)了,即上次会话结束,但服务器与客户端会产⽣⼀个新的会话,之前的session⾥的属性值全部丢失,产⽣新的sesssionId3.客户端与服务器⼀次有效会话(session没有超时),每次访问sessionId相同,若代码中设置了session.setMaxInactiveInterval()值,那么这个session的最⼤不活动间隔时间将被修改,并被应⽤为新值。
销毁session的方法

销毁session的方法在Web开发中,Session是一种存储在服务器端的一组数据,可以通过客户端的Cookie或URL参数进行访问。
一般来说,Session 会在用户登录时创建,用于存储用户的登录信息和相关状态数据,方便后续的访问和验证。
然而,当用户退出登录或者会话过期时,应该及时销毁Session以避免安全问题。
以下是几种常见的销毁Session的方法:1. 调用Session.invalidate()方法:该方法可以立即销毁当前Session中的所有数据,并释放所有相关资源。
例如,在用户退出登录时,可以调用该方法清空Session:```request.getSession().invalidate();```2. 设置Session超时时间:可以通过设置Session的最大存活时间来控制Session的自动销毁。
例如,设置Session在30分钟内没有活动就自动销毁:```session.setMaxInactiveInterval(1800); // 30 minutes```3. 使用Filter过滤器:可以使用Filter过滤器来拦截所有请求,检查Session是否过期或是否需要销毁。
例如,可以编写一个过滤器,在用户访问任何页面时检查Session是否过期,如果过期则立即销毁:```public class SessionFilter implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {HttpServletRequest httpRequest = (HttpServletRequest) request;HttpSession session = httpRequest.getSession(false);if (session != null && !session.isNew() &&session.getAttribute('user') == null) {session.invalidate();}chain.doFilter(request, response);}// ...}```总之,及时销毁Session是Web开发中非常重要的安全措施之一,应该在编写Web应用程序时予以考虑。
关于Session过期和失效

关于Session过期和失效20:02:47 Session虽然我们经常在⽤,但以前对此理解不深,今天特别整理如下: 1.什么是Session?session其实就是⼀个Map,【键=值】对,通过session.getAttribute("name");获得session中设置的参数。
2.session的过期时间是从什么时候开始计算的?是从⼀登录就开始计算还是说从停⽌活动开始计算? 从session不活动的时候开始计算,如果session⼀直活动,session就总不会过期。
从该Session未被访问,开始计时,⼀旦Session被访问, 计时清零。
3.设置session的失效时间 a)web.xml中 <session-config> <session-timeout>30</session-timeout> </session-config> b)在程序中⼿动设置 session.setMaxInactiveInterval(30 * 60); //设置单位为秒,设置为-1永不过期 c)tomcat也可以修改session过期时间,在server.xml中定义context时采⽤如下定义: <Context path="/livsorder"docBase="/home/httpd/html/livsorder" defaultSessionTimeOut="3600"isWARExpanded="true" isWARValidated="false" isInvokerEnabled="true" isWorkDirPersistent="false"/> 4.如何判断session是否过期 a)以前是根据 if(session.getAttribute('user')==null)判断是否为空 b) 如下为看到的⼀个帖⼦,判断session不为空的好⽅法: request.getSeesion(boolean)这个⽅法⾥⾯传了⼀个boolean值。
session过期时间设置说明

session过期时间设置说明一.系统session配置说明针对承保(prpall)、双核(undwrt)系统中,有两个配置文件可以设置session的过期时间分别是web.xml和weblogic.xmlWeb.xml中配置<session-config><session-timeout>60</session-timeout></session-config>时间单位是一分钟,并且只能是整数,如果是零或负数,那么会话就永远不会超时。
此例表示Session将在60分钟后过期weblogic.xml中设置的TimeoutSecs属性值。
Weblogic.xml中配置<session-param><param-name>TimeoutSecs</param-name><param-value>1800</param-value></session-param>时间单位是一秒钟,表示1800秒后失效。
1.如果两个配置文件中都有配置,且Weblogic.xml中配置的秒数必须可以被60整除,(如60,120等)。
则按照时间最小的那个为准。
2.如果两个配置文件中都有配置,且Weblogic.xml中配置的秒数必须不可以被60整除(如,45,90等)。
则以web.xml设置的时间为准。
3.如果web.xml文件中没有设置,且Weblogic.xml中有配置。
则按照Weblogic.xml 的设置为准。
4.为保证session的唯一性,在weblogic环境下,建议只在weblogic.xml中设置。
防止出现冲突。
二.疑问1.web.xml,weblogic.xml同时配置时,为什么会是以时间小的为准?暂时无解。
2.对应的weblogic.xml 必须配置为分钟的整数倍?如web=2m weblogic=90s,最终为以web为准。
springboot2以上版本设置session超时时间

springboot2以上版本设置session超时时间
在springboot2.0之后,设置session超时的⽅式修改为在application.yml或application.xml上⾯添加
server.servlet.session.timeout=DT1M
PT1M 意思是设置session失效的时间是1分钟。
扩展:Duration
通过查看springboot源码发现setTimeouot⽅法,这⾥要求传⼊Duration的实例
public void setTimeout(Duration timeout) {
this.timeout = timeout;
}
⽽Duration是在Java8中新增的,主要⽤来计算⽇期差值,Duration是被final声明的,并且是
线程安全的
转换字符串⽅式,类似于 SimpleDateFormat 的格式化⽇期⽅式
Duration 字符串类似数字有正负之分,默认正,负以’-‘开头,紧接着’P’,下⾯所有字母都不区分⼤
⼩写:
‘D’ – 天
‘H’ – ⼩时
‘M’ – 分钟
‘S’ – 秒
字符’T’是紧跟在时分秒之前的,每个单位都必须由数字开始,且时分秒顺序不能乱,⽐
如:P2DT3M5S,P3D,PT3S
PT3M2S 等于 -PT-3M-2S
最后总结⼀下Duration最实⽤的⼀个功能其实是 between ⽅法,因为有很多时候我们需要计
算两个⽇期之间的天数或者⼩时数,⽤这个就可以很⽅便的进⾏操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在一般系统登录后,都会设置一个当前session失效的时间,以确保在用户没有使用系统一定时间后,自动退出登录,销毁session。
具体设置很简单:
在主页面或者公共页面中加入:
session.setMaxInactiveInterval(900);
参数900单位是秒,即在没有活动15分钟后,session将失效。
这里要注意这个session设置的时间是根据服务器来计算的,而不是客户端。
所以如果是在调试程序,应该是修改服务器端时间来测试,而不是客户端。
在一般系统中,也可能需要在session失效后做一些操作,
(1)控制用户数,当session失效后,系统的用户数减少一个等,控制用户数在一定范围内,确保系统的性能。
(2)控制一个用户多次登录,当session有效时,如果相同用户登录,就提示已经登录了,当session失效后,就可以不用提示,直接登录了
那么如何在session失效后,进行一系列的操作呢?
这里就需要用到监听器了,即当session因为各种原因失效后,监听器就可以监听到,然后执行监听器中定义好的程序,就可以了。
监听器类为:HttpSessionListener类,有sessionCreated和sessionDestroyed两个方法
自己可以继承这个类,然后分别实现。
sessionCreated指在session创建时执行的方法
sessionDestroyed指在session失效时执行的方法
给一个简单的例子:
public class SessionListener implements HttpSessionListener{
public void sessionCreated(HttpSessionEvent event) { HttpSession ses = event.getSession();
String id=ses.getId()+ses.getCreationTime(); erMap.put(id, Boolean.TRUE); //添加用户
}
public void sessionDestroyed(HttpSessionEvent event) { HttpSession ses = event.getSession();
String id=ses.getId()+ses.getCreationTime();
synchronized (this) {
ERNUM--; //用户数减一
erMap.remove(id); //从用户组中移除掉,用户组为一个map
}
}
然后只需要把这个监听器在web.xml中声明就可以了
例如:
<listener>
<listener-class>
com.summer.kernel.tools.SessionListener
</listener-class>
</listener>
补充:
具体设置很简单,方法有三种:
(1)在主页面或者公共页面中加入:
java 代码
1.HttpSession ses = request.getSession();
2.ses.setMaxInactiveInterval(10);
session.setMaxInactiveInterval(900);
参数900单位是秒,即在没有活动15分钟后,session将失效。
这里要注意这个session设置的时间是根据服务器来计算的,而不是客户端。
所以如果是在调试程序,应该是修改服务器端时间来测试,而不是客户端。
(2)也是比较通用的设置session失效时间的方法,就是在项目的
web.xml中设置
<session-config>
<session-timeout>15</session-timeout>
</session-config>
这里的15也就是15分钟失效.
(3)直接在应用服务器中设置,如果是tomcat,可以在tomcat目录下conf/web.xml中
找到<session-config>元素,tomcat默认设置是30分钟,只要修改这个值就可以了。
在server.xml中定义context中如下定义:
xml 代码
<Context path="/livsorder" docBase="/home/httpd/html/livsorder" defaultSessionTimeOut="3600" isWARExpanded="true"
isWARValidated="false" isInvokerEnabled="true"
isWorkDirPersistent="false"/>
需要注意的是如果上述三个地方如果都设置了,有个优先级的问题,从高到低:
(3)◊(2)---◊(1)--
相关文章:
•Session过期时间的四种设置方式•PHP中,设定Session过期时间
•设置Session过期时间的问题•设置用于Session的Cookie的过期...
•ASP中Session技巧默认过期时
间...
•
判断Session的过期时间-采用
Java...。