这个问题很老,但我认为在这里得到正确的答案是有价值的.
Filip将服务器端Java与客户端Java混淆.他是正确的,你不能在不使用自定义方法的情况下在两个服务器端平台之间共享会话,例如Java(J2EE)和ASP.Net.
但是,applet是客户端的,因此应该能够访问主机页面的会话信息.问题是ASP.Net 2.0在会话cookie上添加了HttpOnly标志.此标志可防止JavaScript和Java小程序访问这些cookie.
解决方法是关闭会话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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,即使使用此修复程序,并非所有浏览器/ OS/Java组合都可以访问cookie.我目前正在研究在Windows XP上使用Java 1.6.0_13在Firefox 4.0.1上无法访问会话cookie的问题.
解决方法是使用Dr. Dad建议的方法,其中会话ID作为参数传递给applet,然后嵌入到请求URL中(需要在服务器端配置中打开URL会话)或作为手动设置的cookie发送.