我正在尝试在两个Web应用程序之间共享会话,这两个Web应用程序都托管在同一台服 一个是.net 2.0 Web表单应用程序,另一个是.net 3.5 MVC2应用程序.
两个应用程序的会话都设置如下:
<sessionState
mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:42424"
/>
Run Code Online (Sandbox Code Playgroud)
在webform应用程序中,我将会话密钥发布到MVC应用程序:
protected void LinkButton1_Click(object sender, EventArgs e)
{
Session["myvariable"] = "dan";
string sessionKey = HttpContext.Current.Session.SessionID;
//Followed by some code that posts sessionKey to the other application
}
Run Code Online (Sandbox Code Playgroud)
然后我在MVC应用程序中接收它并尝试使用相同的会话,如下所示:
[HttpPost]
public void Recieve(string sessionKey )
{
var manager = new SessionIDManager();
bool redirected;
bool IsAdded;
manager.SaveSessionID(HttpContext.ApplicationInstance.Context, Id, out redirected, out IsAdded);
var myVar = Session["myvariable"];
}
Run Code Online (Sandbox Code Playgroud)
密钥正在发布但会话似乎没有加载到MVC应用程序中,即sessionKey为null.可以做我想做的事吗?
我正在尝试一些值存储在会话从处理程序页面,我做一个重定向到一个页面的WebForms,这将拿起之前会话值和预填的WebForm:
public class Handler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
...
context.Session["StackOverflow"] = "overflowing";
context.Response.Redirect("~/AnotherPage.aspx");
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
除了context.Sessionobject是null.
如何从处理程序访问会话状态?
我在ASP.Net MVC中创建一个ActionResult来提供图像.启用会话状态后,IIS将一次只处理来自同一用户的一个请求.(这不仅适用于MVC.)
因此,在具有多个图像回调此Action的页面上,一次只能处理一个图像请求.这是同步的.
我希望这个图像Action是异步的 - 我希望每次执行多个图像请求而不需要前一个完成.(如果图像只是静态文件,IIS会以这种方式为它们提供服务.)
所以,我想禁用Session仅用于对该Action的调用,或者指定某些请求没有Session状态.任何人都知道如何在MVC中完成这项工作?谢谢!
ASP.Net会话看起来非常适合传统的WebForms应用程序,但它们会为现代AJAX和MVC应用程序做一些严重问题.
具体来说,只有3种方法可以访问ASP.Net提供者:
锁定读写(默认) - 会话被锁定,AcquireRequestState直到ReleaseRequestState触发为止.如果浏览器立即发出3个请求,他们将在服务器上排队.这是MVC 2中唯一的选择,但MVC 3允许......
非锁定只读 - 会话未锁定,但无法保存.这似乎是不可靠的,因为有些读取似乎再次锁定会话.
会话已禁用 - 任何读取或写入会话的尝试都会引发异常.
然而,对于一个现代的MVC应用程序,我有很多AJAX事件同时发生 - 我不希望它们在服务器上的队列,但我希望他们能够写入会话.
我想要的是第四种模式:脏读,最后写赢
我认为(很高兴得到纠正)唯一的办法就是完全取代ASP.Net的会话.我可以编写自己的提供程序,但ASP仍会使用它支持的3个模式中的一个调用它.有没有办法让ASP.Net支持乐观并发?
这使得我用一个基本上做同样事情的新类替换对会话的所有调用,但是没有锁定 - 这是一个痛苦.
我希望保留尽可能多的当前会话内容(最重要的是在各种日志中的会话ID),并且代码更换量最少.有没有办法做到这一点?理想情况下,我想HttpContext.Current.Session指向我的新类,但没有ASP.Net锁定任何请求.
有没有人做过这样的事情?看来奇怪的是,所有的AJAXey MVC应用程序都是ASP的一个新问题.
我是php的新手,我正在试图弄清楚如何使用会话检查并查看用户是否登录到网站,以便他们有权访问特定页面.
这是一件复杂的事情,还是因为我是一个无法理解的菜鸟?
谢谢您的帮助!
有没有之间的差异Session.Clear()和Session.RemoveAll()?
描述和文档页面似乎完全相同,但我假设必须有一些创建两个函数的原因,我是对的吗?
我正在尝试将Redis会话集成到我用Node.js编写的身份验证系统中.
我已经能够成功设置Redis服务器connect-redis和Express服务器.
这是我的设置(只是重要的一点):
var express = require("express");
var RedisStore = require("connect-redis")(express);
var redis = require("redis").createClient();
app.use(express.cookieParser());
app.use(express.session({
secret: "thisismysecretkey",
store: new RedisStore({ host: 'localhost', port: 6379, client: redis })
}));
Run Code Online (Sandbox Code Playgroud)
现在......我如何实际创建,阅读和销毁会话?我已经阅读了大量关于如何设置的文章connect-redis和关于SO的许多问题,但我发誓每一个都停在配置上,并没有解释如何实际使用它...
我知道这可能非常简单,但请不要downvote,只是解释:).
我想要做的是将用户ID限制为只能一次登录到一个设备.例如,用户ID"abc"登录到他们的计算机.用户ID"abc"现在尝试从手机登录.我想要发生的是在他们的计算机上杀死会话.
Spotify应用就是这样做的 - Spotify只允许一个用户ID一次登录到一个设备上.
我正在使用ASP.NET成员资格(SqlMembershipProvider)和表单身份验证.
我已尝试使用Session变量,但我不确定从何处开始.
c# asp.net-membership session-state sqlmembershipprovider asp.net-mvc-4
session-state ×10
asp.net ×6
session ×4
c# ×3
asp.net-mvc ×2
actionresult ×1
asynchronous ×1
concurrency ×1
handler ×1
ihttphandler ×1
login ×1
node.js ×1
php ×1
redis ×1