我一直想知道,如果一个PHP会话超时执行脚本的中部期间,将在$ _SESSION数组中的内容仍然可用,直到脚本执行结束?例如:
session_start();
if(! isset($_SESSION['name'])) {
echo 'Name is not set';
exit;
}
// imagine there is a bunch of code here and that the session times out while
// this code is being executed
echo 'Name is ', $_SESSION['name']; // will this line throw an error?
Run Code Online (Sandbox Code Playgroud)
将会话变量复制到本地作用域是否切实可行,以便稍后在脚本中读取它们而不必继续检查会话超时?就像是:
session_start();
if(isset($_SESSION['name'])) {
$name = $_SESSION['name'];
} else {
echo 'Name is not set';
exit;
}
// bunch of code here
echo 'Name is ', $name;
Run Code Online (Sandbox Code Playgroud) 当用户关闭浏览器时,我的php会话设置为过期,但我注意到如果我将浏览器长时间打开(例如24小时以上),会话仍然存在.
有没有办法可以让这些会话在浏览器关闭或延长一段时间后到期?
我想知道如何获得我的应用程序的会话超时值
我已经在web.xml文件中设置了会话超时值,并希望通过session.getSessionTimeout之类的代码获取此值
如果有人知道请在这里发布
我只想要2知道它在web.xml中为我的grails应用程序设置与否
我有一个javax.servlet.http.HttpSessionListener的实现,它应该检测Struts项目中的用户会话失效/超时.
sessionDestroyed()似乎永远不会被调用,我可以通过删除我的JSESSIONID并刷新页面来重现这一点.我还发现让浏览器保持打开状态直到会话超时具有相同的效果.
该站点使用Java 1.5在JBoss 4.2.3.GA中运行.
我开始怀疑HttpSessionListener不能达到我的预期,我错过了什么?
编辑:
我的监听器在我的web.xml中注册如下:
<listener>
<listener-class>com.domain.web.listener.LogoutListener</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud) 我遇到频繁的会话超时问题.
我想编写一个可以在每个控制器上使用的通用过滤器,过滤器应该将用户重定向到登录,并在登录后返回用户发送最后一个请求的位置.
我有这个疑问,什么参数控制JSESSIONID的超时?特别考虑这个用例:我有一个移动客户端,它使用JSESSIONID标头发送cookie,但是客户端与应用程序交互并将其留在后台大约6个小时......存储在客户端的cookie不是'删除,然后再次发送回服务器...... JSESSIONID仍然有效吗?哪些参数或配置决定了服务器上cookie的超时?非常感谢.
我使用以下代码在JSF中创建会话对象.问题是,在我尝试访问userdet对象的某个时候,它可能因为会话超时而给我异常.无论如何都要增加JSF中的会话超时.
FacesContext context = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) context.getExternalContext().getSession(true);
session.setAttribute("userdet",user);
Run Code Online (Sandbox Code Playgroud)
当我使用servlet时,我使用以下代码但它是否也适用于JSF?
<web-app ...>
<session-config>
<session-timeout>20</session-timeout>
</session-config>
</web-app>
Run Code Online (Sandbox Code Playgroud) 我使用PayPal付款标准从自定义购物车上传内容.即上传发生在页面重定向中,该页面重定向将隐藏的变量发布到客户完成交易的PayPal.交易完成后,PayPal使用"IPN"流程通知我已付款.
在这种情况下,同时进行预订.与出售有限库存商品相同.因为在那里竞争相同的时段而有多个PayPal交易是不好的,所以在客户被重定向到PayPal之前进行预订.
一旦客户在PayPal,他们可能会意识到他们没有任何钱并关闭窗口,导致需要超时和放弃的未付预订.
PayPal结账页面是否有保证的到期时间,之后可以丢弃预订而不会有被删除交易的意外付款风险?我意识到IPN有它自己的非确定性计时,但不知道甚至有一个有效期,有人可能会坐在网站上一天然后付钱.
我有一个多页Django注册过程,其中用户执行以下步骤:
在上面的步骤1中,用户的ID和一些其他信息存储在会话中.然后在步骤2到4中必要时检查它们.用户ID和用户名也将在步骤5中传递给支付处理器.我正在考虑将会话超时时间设置为30分钟或1小时.这是我的问题.当用户获取上述每个页面时,我应该阅读并重新分配会话变量,以帮助用户避免会话超时吗?Django 文档说Django只在会话被修改时保存会话(即任何字典值已被分配或删除).我想如果我在用户的会话从一个页面移动到另一个页面时"刷新"该会话,那么它们将不太可能被超时并且因此将经历更平滑的注册过程.
有什么建议?谢谢.
在我的Vaadin应用程序中,当Vaadin在"会话超时"消息后没有使会话无效时,我遇到了问题.收到此消息后,用户有时可以单击链接或刷新页面并继续工作,就好像他们仍在登录一样.我使用以下参数:
closeIdleSessions=true
heartbeatInterval=60
session-timeout=15
Run Code Online (Sandbox Code Playgroud)
最后一个参数(会话超时)也在context.xml(session-timeout = 900)和web.xml(session-config/session-timeout = 15)中设置,因为我没有从vaadin文档中得到清楚,是否有这样的vaadin servlet的参数与否.
有人面对名义上的问题吗?
更新1:固定参数片段.
更新2:出现消息SessionDestroyListener.sessionDestroy时不会触发Session expired.
更新3:由于代码错误而出现上一个错误.现在SessionDestroyListener.sessionDestroy被调用,但我无法访问给HttpSession定的事件.
这是我的SessionDestroyListener代码(请注意其中一个if分支的评论):
private static class SynchronizerSessionDestroyListener implements SessionDestroyListener {
@Override
public void sessionDestroy(SessionDestroyEvent event) {
if (event.getSession() != null){
WrappedSession wrappedSession = event.getSession().getSession();
if (wrappedSession instanceof WrappedHttpSession){
WrappedHttpSession wrappedHttpSession = (WrappedHttpSession) wrappedSession;
HttpSession httpSession = wrappedHttpSession.getHttpSession();
if (httpSession != null){
try {
httpSession.invalidate();
logger.debug("Session '{}' was invalidated", httpSession.getId());
} catch (IllegalStateException …Run Code Online (Sandbox Code Playgroud) session-timeout ×10
session ×5
java ×4
php ×2
asp.net-mvc ×1
django ×1
django-views ×1
grails ×1
groovy ×1
java-ee ×1
jsf ×1
jsf-2 ×1
paypal ×1
paypal-ipn ×1
servlets ×1
vaadin ×1