我正在寻找一个解决方案,允许我定期检查用户会话是否已过期,如果是,则将其重定向到登录页面.
我正在使用Authlogic gem,所以我正在做的是调用一个在current_user上进行测试的函数.
我的USER_SESSION_TIMEOUT是5分钟,所以我每隔5:10分钟进行一次这个ajax调用.
<%= periodically_call_remote :url => {:controller => 'user_session', :action => 'check_session_timed_out'}, :frequency => (USER_SESSION_TIMEOUT + 10.seconds) %>
Run Code Online (Sandbox Code Playgroud)
def check_session_timed_out
if !current_user
flash[:login_notice] = "Your session timed out due to a period of inactivity. Please sign in again."
render :update do |page|
page.redirect_to "/user_sessions/new"
end
else
render :nothing => true
end
end
Run Code Online (Sandbox Code Playgroud)
我注意到每次调用current_user时,用户对象都会更新,因此会话更新为5分钟.
打开一个选项卡时没有问题但是如果每次调用check_session_timed_out时都有2个选项卡,则current_user将更新用户,因此会话永不过期.
任何的想法?谢谢
这是否可以为ASP.Net中的不同会话设置不同的超时?
编辑 我的意思是在同一页面我有2个会话变量Session ["ss1"]和Session ["ss2"],是否有可能为每个会话设置超时?或者无论如何都要像保存会话到cookie并设置过期一样?我刚刚接触ASP.Net新手
我有这条线:
<sessionState mode="SQLServer" sqlConnectionString="Data Source=localhost;User Id=sa;Password=test;" timeout="1" />
Run Code Online (Sandbox Code Playgroud)
它将会话存储在sql状态服务器中.但是一分钟后它没有正常超时.
当我更改线以使用InProc模式时:
<sessionState mode="InProc" sqlConnectionString="Data Source=localhost;User Id=sa;Password=test;" timeout="1" />
Run Code Online (Sandbox Code Playgroud)
一分钟后它会超时.
任何想法为什么会这样?使用SqlServer时如何让它超时?
我们有一个要求,当ASP.NET会话到期并且用户正在使用Silverlight插件时,我们希望将用户重定向到登录页面.
因此,情况是,我们有一个运行ASP.Net的遗留应用程序,我们所有的新模块都在Silverlight中,而旧版应用程序加载了Silverlight应用程序.这一切都有效:-)然后用户离开他们的桌面并在ASP.Net会话超时后返回,但随后尝试在使用RIA域服务的Silverlight应用程序中继续做某事.由于会话超时,RIA域服务失败,但它没有失败,因为SessionExpired异常,用户/密码无效,它只是失败,域异常类似于域中引发的"真实"异常模型,所以我们无法确定这次是因为会话已过期.
有很多关于如何保持ASP.Net会话活着的答案,我们不想这样做,我们希望会话过期,但我们希望能够在Silverlight中优雅地处理它并将用户引导到登录页面.
我们有这个工作,但问题是每当Silverlight应用程序中引发异常时,这会将您重定向到登录页面,这不是预期的行为.我们只想在会话到期的情况下重定向.
有任何想法吗?
我正在进行一个项目在线考试只是为了获得知识.可能存在电源故障的情况,并且当候选人再次登录时,必须给出在电源故障期间浪费的时间.但是在我的javascript代码中,考试在与服务器时间相对应的2小时后结束(AJAX此处使用).时间结束后,学生将被重定向到主页.我想到了一个解决方案,但我没有找到实现它的开始.
由于会话保持不变,所以我可以保持2小时的使用时间并可以存储
database.当他重新登录时,可以检查对应于他的特定行并且可以更新时间.
但我无法实现它.请告诉我是否有其他解决方案或我认为的方向是对还是错.
考试时钟从2小时开始恢复.当电力故障出现时,它不会从正在滴答作响的时间恢复.在这种情况下,无论是发生电源故障还是候选人再次重新登录,都是一样的.我不是要求任何代码来解决这个问题.我只想要一个我能想到的暗示或方向.我只是想知道它背后的概念是什么.
此案例与Wiktor Zychla的问题非常相似,请参阅如何在与ADFS 2.0联合时正确设置超时
我们正在经历相同的行为,ADFS愉快地将用户重定向回Sharepoint站点并重新创建FedAuth cookie,即使ADFS应提示凭证 - 我们希望用户在一段时间的空闲时间后重新进行身份验证.基本上看起来会话总是滑动.
我们已禁用持久性cookie,因此在会话结束时通过关闭浏览器来删除FedAuth cookie,因此在关闭所有浏览器窗口并启动新会话后,用户必须重新进行身份验证,这样才有效.
据我所知,ADFS管理单元中的Web SSO生存期设置控制用户需要在AD FS上重新进行身份验证的时间(再次输入其凭据).Tokenlifetime和LogonTokenCacheExpirationWindow一起控制,当Sharepoint重定向到AD FS时,以便更新FedAuth cookie.
以下是来自http://msdn.microsoft.com/en-us/library/hh446526.aspx的引用:
要强制用户在重定向回ADFS时重新输入凭据,应将ADFS中的Web SSO生存期设置为小于或等于SAMLtokenlifetime减去LogonTokenCacheExpirationWindow的值.
所以,我们做了以下事情:
1.设置SAML令牌的生命周期
Add-PSSnapin Microsoft.ADFS.PowerShell
Set-AdfsRelyingPartyTrust –TargetName "[ourrelayingpartytrustreference]" –TokenLifeTime 7
Run Code Online (Sandbox Code Playgroud)
2.设置LogonTokenCacheExpirationWindow(并禁用持久性cookie)
Add-PSSnapin Microsoft.SharePoint.Powershell -EA 0
$sts = Get-SPSecurityTokenServiceConfig
$sts.UseSessionCookies = $true
$sts.LogonTokenCacheExpirationWindow = (New-Timespan -Minutes 1)
$sts.Update()
iisreset
Run Code Online (Sandbox Code Playgroud)
3.调整的Web SSO生存期:AD FS 2.0管理控制台管理单元中的5分钟(在Powershell中运行Get-ADFSProperties正确返回SsoLifetime:5)
因此预期的结果是:
当前的实际行为(步骤1-4类似):
(5.)AD FS不提示输入凭据,浏览器重定向到Sharepoint页面并重新创建FedAuth cookie.
所以 - 对我们来说,看起来AD FS会话永远不会过期,无论我们做什么.如果我们创建将LogonTokenCacheExpirationWindow值设置为高于SAMLtokenlifetime的错误配置(例如,LogonTokecacheExpirationWindow = 8和SAMLtokenlifetime = 7),我们将得到Sharepoint和AD FS之间循环的预期行为. …
authentication session-timeout sharepoint-2010 federation adfs2.0
我是JEE的新手,这让我很困惑.根据HttpSession.html #setMaxInactiveInterval(int interval)文档
一个
interval的值zero以下表明会话应永不超时.
但是根据我的教科书(已经有几年了 - 所以我希望它不总是正确的)使用零作为参数会导致会话立即超时.
这段代码
public class Test extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
session.setAttribute("foo", 42);
session.setMaxInactiveInterval(0);
out.println(session.getAttribute("foo"));//problem here
}
}
Run Code Online (Sandbox Code Playgroud)
在Glassfish 4.0上使用似乎从教科书而不是更新的官方文档确认理论,因为它返回HTTP状态500 - 内部服务器错误,错误消息
java.lang.IllegalStateException: getAttribute: Session already invalidated
这里发生了什么?这个Glassfish 4.0错误或文档是错误的吗?或者也许有第三种选择?
PS.这段代码的工作原理应该是负值(会话没有失效),我正在使用-1而不是0在我的代码中.我只是对有问题感兴趣0.
我有管理页面,我用它来为我的网站做一些更新工作.问题是会话将在一分钟或30秒内到期并将注销用户.我已经在根文件夹的Web.Config中设置了Session,也在Admin文件夹中的Web.Config中设置了Session,但会话很快就会过期.我把它设置为60分钟,但它只持续30秒或一分钟.这是我的根文件夹的web.config内容
<sessionState timeout="60" mode="InProc"
cookieless="false"></sessionState>
<customErrors mode="Off">
</customErrors>
<trace enabled="true" />
<authentication mode="Forms">
<forms
protection="All"
timeout="120"
domain="www.marpallichande.in"
slidingExpiration="true"
name="auth_cookie" />
</authentication>
Run Code Online (Sandbox Code Playgroud)
这是我在Admin文件夹中设置的web.cofing文件
<sessionState timeout="60" mode="InProc"
cookieless="false"></sessionState>
Run Code Online (Sandbox Code Playgroud)
这是我在Session_Start方法下的Global.asax文件中的设置
Session.Timeout=60;
Run Code Online (Sandbox Code Playgroud)
我没有得到会话如此过期如何过期,或者除了会话之外是否还有其他原因被注销.
参考:http://msdn.microsoft.com/en-us/library/vstudio/ms178581( v= vs.100).aspx?cs-save- lang=1& cs- lang= vb#code-snippet-1
只要继续使用相同的SessionID值进行请求,会话就被视为活动.如果特定会话的请求之间的时间超过指定的超时值(以分钟为单位),则该会话将被视为已过期.使用过期的SessionID值发出的请求将导致新会话.
我想确保我正确理解该段落.从那里我读到ASP.NET Sessions在滑动规则上工作,而不是绝对规则.也就是说,会话将在最后一次会话请求后20分钟到期(假设此处为默认值为20分钟),不管请求/会话活动如何,不是绝对在会话开始后20分钟?我做对了吗?
我们已经创建了STS会话令牌系统,用于使用AWS SDK for .Net在AWS S3 Bucket上访问文件,如果传输时间花费了更多时间(文件超过15分钟,则该时间范围实际上是15分钟)(15分钟)。完整上传)我可以创建新密钥并继续上传吗?是否可以使用AWS sdk处理它?
session-timeout ×10
asp.net ×4
session ×4
java ×2
java-ee ×2
.net ×1
adfs2.0 ×1
amazon-s3 ×1
asp.net-mvc ×1
authlogic ×1
aws-sdk ×1
c# ×1
federation ×1
glassfish ×1
iis ×1
javascript ×1
ria ×1
silverlight ×1