Session.Clear()和Session.Abandon()都摆脱了会话变量.据我了解,Abandon()结束当前会话,并导致创建一个新会话,从而导致End和Start事件被触发.
在大多数情况下,最好调用Abandon(),例如将用户注销.有没有我使用Clear()的情况?是否存在很大的性能差异?
销毁会话和删除其值有什么区别?你能举一个证明这个的例子吗?
我搜索了这个问题,但没有掌握全部答案.一些答案是:
Session.Abandon() 破坏会话Session.Clear() 只删除所有值一位朋友告诉我这个:
清除会话不会取消设置会话,它仍然存在与用户相同的ID,但只是清除了值.
放弃将完全破坏会话,这意味着您需要先开始一个新会话,然后才能在该会话中为该用户存储更多值.
以下代码有效,不会抛出任何异常.
Session.Abandon();
Session["tempKey1"] = "tempValue1";
Run Code Online (Sandbox Code Playgroud)
当您放弃会话时,您(或更确切地说是用户)将获得一个新的SessionId
当我测试Session时,当我放弃会话时它不会做任何改变.
我发现一个区别:
session.Abandon()引发Session_End事件
我是一名新开发人员,我被分配了解决我们的注销功能无法正常工作的任务.我已经尝试了所有可以找到的方法.下面是我保留的日志,其中包括我使用过的方法.
在CommonHeader.ascx表单中添加了一个注销按钮
已经在logout.aspx.vb表单中尝试了许多方法来使其结束或清除会话,但它们都不起作用.
一个.logout.aspx.vb形式中定义的ClearSession子例程:
Session("Variable") = ""
FormsAuthentication.SignOut()
Session.RemoveAll()
Session.Abandon()
Session.Clear()
Run Code Online (Sandbox Code Playgroud)
湾 还将其添加到Page_Load子例程的顶部:
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache)
HttpContext.Current.Response.Cache.SetNoServerCaching()
HttpContext.Current.Response.Cache.SetNoStore()
Run Code Online (Sandbox Code Playgroud)
C.还将ClearSession子例程更改Session.Contents.Remove("Variable")为Session("Variable") = ""
这些方法都不起作用.我们使用Siteminder,我一直想知道这是否是问题的根源.我在清除使用Siteminder的会话时找不到任何内容.另请注意,此应用程序使用Visual Studio 2003编码.
这是我在ascx文件中使用的按钮的代码:
athp:TopNavText Title ="Log Out"NavigateUrl ="logout.aspx"Target ="_ top"/
然后在"logout.aspx"表单上,我尝试使用上述方法之一或每种方法的组合.这是我触摸它之前的代码:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ClearSession()
Response.Redirect("login.aspx")
End Sub
Public Sub ClearSession()
Session("Variable") = ""
End Sub
Run Code Online (Sandbox Code Playgroud) 我正试图从MVC Razor中的会话注销,这是我目前在MainController中的内容:
[HttpPost]
public ActionResult Login(Users user)
{
if (ModelState.IsValid)
{
if (ValidateUser(user.Email, user.Password))
{
FormsAuthentication.SetAuthCookie(user.Email, false);
return RedirectToAction("Index", "Members");
}
else
{
ModelState.AddModelError("", "");
}
}
return View();
}
private bool ValidateUser(string Email, string Password)
{
bool isValid = false;
using (var db = new ShareRideDBEntities())
{
var User = db.tblProfiles.FirstOrDefault(u => u.PROF_Email == Email);
var ut = db.tblProfilesTypes.FirstOrDefault(t => t.TPE_ID == User.PROF_UserType);
if (User != null)
{
if (User.PROF_Password == Password)
{
Session["UserID"] = User.PROF_UserID;
Session["Name"] = User.PROF_FirstName; …Run Code Online (Sandbox Code Playgroud) 问:
我知道要销毁所有会话,我可以使用:
Session.Abandon()
Run Code Online (Sandbox Code Playgroud)
根据我的问题.
但为什么没有任何等效方法只能销毁一个会话.我应该使用
Session.Remove("varName")
Run Code Online (Sandbox Code Playgroud)
代替.
asp.net ×4
session ×4
.net ×3
c# ×2
asp.net-mvc ×1
logout ×1
performance ×1
razor ×1
siteminder ×1