我在ASP.NET MVC中看到了两种使用会话数据的方法:
System.Web.SessionState.HttpSessionState,可用 HttpApplicationSystem.Web.HttpSessionStateBase,可用 Controller存储在一个中的数据似乎在另一个中可用.
不幸的是System.Object,这两种类型的唯一共同祖先是,这意味着我不能为任何一种抽象创建可重用的实用程序代码.
为什么API会这样?我失踪的两者之间是否有重要区别?
我总是在一个Session变量中为用户存储数据(在他们登录后),因此我可以在任何页面上使用该数据.
我发现另一种全局存储信息的方法是将它存储在一个类中,使用{ get; set;},然后从任何页面调用它.
现在,我已经使用这两种方法作为测试,它们都运行得很好:
Session["LoginId"] = rdr["uniqueIdentifier"].ToString();
和
Member.LoginId = rdr["uniqueIdentifier"].ToString();
哪里(在Member.cs中)
public class Member
{
public static int Challenges { get; set; }
public static int NicknameId { get; set; }
public static string LoginId { get; set; }
public static string FriendsListId { get; set; }
public static void ClearVariables()
{
Challenges = 0;
NicknameId = 0;
LoginId = null;
FriendsListId = null;
}
}
Run Code Online (Sandbox Code Playgroud)
Global.asax中
void Session_End(object sender, EventArgs e)
{
Member.ClearVariables(); …Run Code Online (Sandbox Code Playgroud) 背景:
ASP.NET会话状态使您能够在用户在Web应用程序中导航ASP.NET页面时存储和检索用户的值.这适用于该应用程序但是当我们在该应用程序中引用了一个类库并且我们需要Session Variables在该库中时,我必须将它传递给每个方法,因为我没有使用依赖注入.
问题:
我有一个控制器,它进行Facebook身份验证如下:
public class FacebookController : Controller
{
private FacebookGateway FacebookGateway = new FacebookGateway();
// GET: /Facebook/
public ActionResult Index()
{
string code = Request.QueryString["code"];
TokenResponse tokenResponse = FacebookGateway.GetTokenResponse(code);
Session["AccessToken"] = tokenResponse.Access_token;
return View();
}
public ActionResult Friends()
{
string accessToken = Session["AccessToken"].ToString();
WebRequest request = WebRequest.Create(instanceUrl + @"profileUrl-Here");
request.Method = "GET";
request.Headers.Add("Some Header " + accessToken);
WebResponse response = request.GetResponse();
string str = String.Empty;
if (response == null)
{
}
else
{
using (StreamReader …Run Code Online (Sandbox Code Playgroud) 我有一个在Web服务器根目录运行的ASP.NET Web应用程序,它通过使用URL重定向提供多个(类似的)Web站点.举一个现实世界的例子:
http://webshopserver/company1/ProductList.aspx -> http://webshopserver/ProductList.aspx?showProductsFrom=company1
http://webshopserver/company2/ProductList.aspx -> http://webshopserver/ProductList.aspx?showProductsFrom=company2
...
Run Code Online (Sandbox Code Playgroud)
这很好用; 唯一的问题是,显然,所有这些不同的商店共享相同的会话对象(因为InProc会话管理器将会话对象存储在AppDomain中).我希望company1和company2的商店有不同的会话对象,例如,如果用户在同一浏览器窗口的不同选项卡中打开company1和company2的商店,则放入company1的购物车中的商品赢了不会出现在公司2的购物车中.
有一些明显的方法来解决这个我不喜欢的问题:
我正在考虑更多的解决方案:
因此,任何有关如何实现这些要点之一的信息(或者可能完全不同的解决方案)都会有所帮助.