注销并终止会话
Posted
技术标签:
【中文标题】注销并终止会话【英文标题】:Log out and kill the session 【发布时间】:2014-08-24 02:18:38 【问题描述】:我有一个运行良好的登录页面。现在我想退出。
以下是我的 header.cfm 文件中的链接。如果会话变量是true
,它会显示“注销”。如果没有,它会显示“登录”。所以我只想注销。
<a id="login-link" href="login.cfm">
<cfif session.userLoggedIn>logout <cfelse>LogIn</cfif>
</a>
Application.cfc
public boolean function onRequestStart(string targetPage)
if(findNocase("login.cfm", arguments.targetPage))
return true;
else if(session.userLoggedIn)
return true;
else
include "login.cfm";
return false;
public void function onSessionStart(struct sessionObj)
session.userLoggedIn = false;
logIn.cfm
<cfif isDefined("form.btn_login") >
<cfset userResultResponse = communtiyServic.getUsers(form.user,form.pwd)>
<cfset userQry = userResultResponse.getQryData() >
<cfif userQRY.recordCount gt 0 >
<cfset session.userLoggedIn = true />
<cflocation url="index.cfm" >
<cfelse>
<cfoutput>invaled userName or password </cfoutput>
</cfif>
</cfif>
【问题讨论】:
难道您不只需要一个将 session.userLoggedIn 设置为 false 的注销页面即可将用户注销吗? 【参考方案1】:如果您将CFID
和CFTOKEN
用于会话标识cookie(您可能不应该这样做,但这是默认设置),那么您应该可以在logout()
中调用SessionInvalidate()
方法。这将使服务器和客户端之间的会话连接无效。我不确定它是否使服务器上的会话数据过期,但如果没有,它会在超时期限后自行超时。与此同时,它在客户端将无法访问,而无论出于何种目的和目的,它都可以满足您的需求。
【讨论】:
Sessioninvalidate...这是多人功能。非常好。 啊!我得到了自动完成忍者。我的意思是多用途! @FrankTudor,你为什么不简单地编辑你的评论? @DanBracuk:他可能认为我已经读过它,所以事后编辑它不会有任何帮助,但新评论会引发新通知。 @DanBracuk 在我起床洗澡开始新的一天之前,我在我的安卓手机上回复了答案。我在开车上班时注意到了这一点……在我的代表级别上,我没有能力评论编辑能力(大约一分钟后)……(向天空举起拳头……'诅咒你的 android 众神和你的自动更正诡计!')。 :D【参考方案2】:编辑 500 次编辑稍后修复措辞这里是示例代码的答案...我做了一些更改以简化流程并使用 url 查询字符串从任何页面注销。还有其他方法,但这可以与 OPs 示例一起使用。
在您的 onRequestStart() 中添加一些代码以查找注销/重定向以使用 location() 到登录页面。
OP 使用其现有代码实现注销/重定向的一种简单方法是在 onRequestStart() 中添加类似这样的内容:
param name="url.logout" default=0;
if (isDefined('url.logout') and url.logout)
if (isDefined('session'))
/*
You can use structDelete(session,'whatever')
if you know the session.whatever you are clipping
and you will have to loop and kill all SO
try the structClear() function below.
*/
structClear(session);
/*
The OP can redirect to login.cfm
which will auto take them to the login.cfm page
provided you tack on the ?logout=1 to the URL like this
http://yoursite.com/somepage.cfm?logout=1
*/
location(url="login.cfm");
【讨论】:
你能举一个比较有趣的例子吗? @JamesAMohler 我更新了我的答案并有一个例子以上是关于注销并终止会话的主要内容,如果未能解决你的问题,请参考以下文章