gpt4 book ai didi

c# - 如何访问在 ashx 中修改的 aspx session ?

转载 作者:行者123 更新时间:2023-12-02 05:17:17 26 4
gpt4 key购买 nike

我正在使用 uploadify 上传文件,它们会自动发布到处理程序。然后我修改处理程序中的 session ,我已将其设置为网站公共(public)类中的静态属性。然后我尝试在 aspx 页面中访问同一个 session ,结果值为空。我感觉这是因为 cookie,但需要有一种方法来解决这个问题,而无需在 url 中公开 sessionid。

ASHX:

public class Upload : IHttpHandler, IReadOnlySessionState, IRequiresSessionState 
{

public void ProcessRequest(HttpContext context)
{
...
CMSSession.Current.UploadedFiles.Add(fileName);
}
}

session 类:

public class CMSSession
{
public static CMSSession Current
{
get
{
CMSSession session = (CMSSession)HttpContext.Current.Session["__CMSSession__"];
if (session == null)
{
session = new CMSSession();
HttpContext.Current.Session["__CMSSession__"] = session;
}
return session;
}
}

public List<string> UploadedFiles { get; set; }
}

ASPX:

if (CMSSession.Current.UploadedFiles != null)
{
...
}
else
{
IT'S ALWAYS NULL
}

Web.Config:

<sessionState mode="InProc" cookieless="false" /> - causes session to always null in aspx when modified in ashx
<sessionState mode="InProc" cookieless="true" /> - session value is not null, but sessionid is exposed in the url

如何在不将 cookieless 更改为 true 的情况下访问和修改 ASHX 文件中的当前 session ,然后从 ASPX 页面访问 session ?

我已经尝试使用 HttpContext 并使用传递到 ASHX 的上下文...没有任何效果。

与这个问题相同,但必须有更安全的方法:session set in ashx and get that session on aspx

有什么想法吗?

最佳答案

我找到了答案:当从 FLASH 调用处理程序时(如 swfupload 或 uploadify),它不会将当前 session ID 传递给处理程序。处理程序然后创建一个新 session 。要解决此问题,请执行以下操作:

您的用户界面:JavaScript:

$(Selector).uploadify({
swf: 'uploadify.swf',
uploader: 'Upload.ashx?ASPSESSID=<%=Session.SessionID%>'
});

添加到:Global.asax:

void Application_BeginRequest(object sender, EventArgs e)
{
try
{
string session_param_name = "ASPSESSID";
string session_cookie_name = "ASP.NET_SESSIONID";
string session_value = Request.Form[session_param_name] ?? Request.QueryString[session_param_name];
if (session_value != null) { UpdateCookie(session_cookie_name, session_value); }
}
catch (Exception) { }
}

void UpdateCookie(string cookie_name, string cookie_value)
{
HttpCookie cookie = HttpContext.Current.Request.Cookies.Get(cookie_name);
if (cookie == null)
{
HttpCookie cookie1 = new HttpCookie(cookie_name, cookie_value);
Response.Cookies.Add(cookie1);
}
else
{
cookie.Value = cookie_value;
HttpContext.Current.Request.Cookies.Set(cookie);
}
}

从以下位置获取并简化上传: http://snipplr.com/view/15180/

如果使用表单验证,您可能需要使用 authid:

&AUTHID=<%= Request.Cookies[FormsAuthentication.FormsCookieName] == null ? "" : Request.Cookies[FormsAuthentication.FormsCookieName].Value %>

将其附加到 jQuery 中的 uploader 参数。

然后将以下内容添加到全局:

try
{
string auth_param_name = "AUTHID";
string auth_cookie_name = FormsAuthentication.FormsCookieName;
string auth_value = Request.Form[auth_param_name] ?? Request.QueryString[auth_param_name];

if (auth_value != null) { UpdateCookie(auth_cookie_name, auth_value); }
}
catch (Exception) { }

您现在可以在 IE、Chrome、FF 等中从处理程序访问相同的 session (甚至使用我在上面问题中使用的静态 session 对象)。

关于c# - 如何访问在 ashx 中修改的 aspx session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14465314/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com