如何使用 HttpContext.Current 为 null 的会话
how to use session with HttpContext.Current at null
我正在尝试使用会话,但是当我调用 SetSession 方法时,我看到 HttpContext.Current 为空,所以我得到 MinValue(来自 gettor,因为会话 属性 为空)如何解决这个问题?因此,每次我尝试获取会话变量时,它都不起作用,确实 =D 看起来我忘记了什么但是...
当用户连接时,我从控制器调用 SessionManager:
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
{
var identityUser = UserManager.FindByEmail(model.Email);
if (identityUser.Matricule.IsNotNull() && !identityUser.Matricule.HasValue)
{
SetAlert("Error");
}
else
{
SessionManager.matricule = identityUser.Matricule.Value;
var user = BL.PersonnelBL.GetAll(SessionManager.matricule);
SessionManager.firstName = user.prenom;
SessionManager.lastName = user.nom;
SessionManager.chainId = user.chaine.chaine;
SessionManager.secteurId = user.chaine.secteur.Id;
SessionManager.serviceId = user.chaine.service.Id;
SessionManager.isAuditor = user.auditTarget.IsNull() ? false : true;
}
// Redirect to local
return RedirectToLocal(returnUrl);
}
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl });
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);
}
会话管理员:
public class SessionManager
{
public static int matricule
{
get
{
object property = GetSession("MATRICULE");
if (property != null)
{
return Convert.ToInt32(property);
}
return int.MinValue;
}
set
{
SetSession("MATRICULE", value);
}
}
}
private static bool SetSession(string key, object value)
{
if (HttpContext.Current != null && HttpContext.Current.Session != null)
{
HttpContext.Current.Session[key] = value;
return true;
}
return false;
}
里面 Web.Config:
<system.web>
...
<sessionState mode="InProc" timeout="45" />
</system.web>
提前致谢
您的 HttpContext.Current
可能是 null
:
的几个原因
你是运行这个代码:
- 在
Task
或另一个后台线程中;
- 来自
Session_End
事件;
- 在不支持会话的
HttpModule
或 HttpHandler
中(参见 IRequiresSessionState
标志接口)。
我正在尝试使用会话,但是当我调用 SetSession 方法时,我看到 HttpContext.Current 为空,所以我得到 MinValue(来自 gettor,因为会话 属性 为空)如何解决这个问题?因此,每次我尝试获取会话变量时,它都不起作用,确实 =D 看起来我忘记了什么但是...
当用户连接时,我从控制器调用 SessionManager:
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
{
var identityUser = UserManager.FindByEmail(model.Email);
if (identityUser.Matricule.IsNotNull() && !identityUser.Matricule.HasValue)
{
SetAlert("Error");
}
else
{
SessionManager.matricule = identityUser.Matricule.Value;
var user = BL.PersonnelBL.GetAll(SessionManager.matricule);
SessionManager.firstName = user.prenom;
SessionManager.lastName = user.nom;
SessionManager.chainId = user.chaine.chaine;
SessionManager.secteurId = user.chaine.secteur.Id;
SessionManager.serviceId = user.chaine.service.Id;
SessionManager.isAuditor = user.auditTarget.IsNull() ? false : true;
}
// Redirect to local
return RedirectToLocal(returnUrl);
}
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl });
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);
}
会话管理员:
public class SessionManager
{
public static int matricule
{
get
{
object property = GetSession("MATRICULE");
if (property != null)
{
return Convert.ToInt32(property);
}
return int.MinValue;
}
set
{
SetSession("MATRICULE", value);
}
}
}
private static bool SetSession(string key, object value)
{
if (HttpContext.Current != null && HttpContext.Current.Session != null)
{
HttpContext.Current.Session[key] = value;
return true;
}
return false;
}
里面 Web.Config:
<system.web>
...
<sessionState mode="InProc" timeout="45" />
</system.web>
提前致谢
您的 HttpContext.Current
可能是 null
:
你是运行这个代码:
- 在
Task
或另一个后台线程中; - 来自
Session_End
事件; - 在不支持会话的
HttpModule
或HttpHandler
中(参见IRequiresSessionState
标志接口)。