gpt4 book ai didi

.net - 与 Java 小程序共享 ASP.NET session cookie

转载 作者:行者123 更新时间:2023-12-02 15:09:40 24 4
gpt4 key购买 nike

我有一个 Java 小程序,它在经过表单验证的 aspx 页面内运行。在我网站的 .NET 1.1 版本中,小程序可以访问 session cookie 并能够从服务器检索文件,但在 .NET 2.0 版本中它无法进行身份验证。

我在其他地方看到过一些论坛帖子,其中指出 2.0 默认情况下将 cookie 设置为 HttpOnly,但到目前为止给出的解决方案对我来说还不起作用。我还在某处读到 2.0 可能会根据用户代理进行歧视。

有人对此有任何经验或见解吗?

最佳答案

这个问题很老了,但我认为在这里找到正确的答案很有值(value)。

Filip 混淆了服务器端 Java 和客户端 Java。他是正确的,如果不使用自定义方法,就无法在两个服务器端平台(例如 Java (J2EE) 和 ASP.Net)之间共享 session 。

但是,小程序是客户端,因此应该能够访问主机页面的 session 信息。问题在于 ASP.Net 2.0 在 session cookie 上添加了 HttpOnly 标志。此标志可防止 JavaScript 和 Java 小程序访问这些 cookie。

解决方法是关闭 session cookie 上的 HttpOnly 标志。虽然您可以在较新版本的 ASP.Net 的配置中执行此操作,但在以前的版本中,解决方案是将以下代码添加到 Global.asax 文件中:

protected void Application_EndRequest(object sender, EventArgs e)
{
/**
* @note Remove the HttpOnly attribute from session cookies, otherwise the
* Java applet won't have access to the session. This solution taken
* from
* http://blogs.msdn.com/jorman/archive/2006/03/05/session-loss-after-migrating-to-asp-net-2-0.aspx
*
* For more information on the HttpOnly attribute see:
*
* http://msdn.microsoft.com/netframework/programming/breakingchanges/runtime/aspnet.aspx
* http://msdn2.microsoft.com/en-us/library/system.web.httpcookie.httponly.aspx
*/
if (Response.Cookies.Count > 0)
{
foreach (string lName in Response.Cookies.AllKeys)
{
if (lName == FormsAuthentication.FormsCookieName ||
lName.ToLower() == "asp.net_sessionid")
{
Response.Cookies[lName].HttpOnly = false;
}
}
}
}

请注意,即使进行了此修复,并非所有浏览器/操作系统/Java 组合都可以访问 cookie。我目前正在研究在 Windows XP 上使用 Java 1.6.0_13 的 Firefox 4.0.1 无法访问 session cookie 的问题。

解决方法是使用 Dr. Dad 建议的方法,其中 session ID 作为参数传递给小程序,然后嵌入到请求 URL 中(需要在服务器端打开 URL session )配置)或作为手动设置的 cookie 发送。

关于.net - 与 Java 小程序共享 ASP.NET session cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/201699/

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