本案例由 小叶 提供
Email: support@my97.net
网站:http://www.my97.net
  Firefox/Chrome中的硕正套件的Session丢失问题
  在Firefox/Chrome浏览器下,你会发现硕正套件的http请求无法象IE浏览器那样能保证在同一个Session中,从而导致请求被服务器阻挡。
  其实,硕正官网上的“开发文档\使用指南\5.页面语法”中已经给出了问题的大致的解决方法:
 ...
 <Param name="Cookie" value="?">   //for firefox/Chrome only
 ...
  我们知道,服务器判断http属于哪个Session是靠http中的Cookie来支持的,只要后端ASPX能够取得这个Cookie,并显式写入页面脚本,问题就迎刃而解了.

  首先,修改aspx页面,把SessonId写到客户端变量:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FireFoxCookie.aspx.cs" Inherits="SupcanDemo.FireFoxCookie" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
 <title></title>
 <script type="text/javascript" src="supcan/dynaload2.js"></script>
 <script>
  //Firefox/Chrome中Cookie丢失的问题, 只要这里输出即可, 这是SessionId在Cookie中的固定写法
  window.$sid = 'ASP.NET_SessionId=<%= System.Web.HttpContext.Current.Session.SessionID %>';
 </script>
 ...
  如果您后端是Java, 那么应该在JSP中增加:
 ...
 </script>
  window.$sid = 'JSESSIONID=<%=request.getSession().getId()%>;Path=<%=request.getContextPath()%>';
 </script>

  然后,修改dynaload.js, 在bldStr( ) 函数中插入这个变量,适当修改之:
 ...
 function bldStr(ctlType, id, para) {
  var w = window;
  ...
  str += '<param Name="Cookie" Value="' +w.$sid+ '">';
  str += '<param Name="CtlPara" Value="' +para+ '"></Object>';
  return str;
 }
 ...
  完整的aspx demo包可以从 http://pan.baidu.com/s/1mgvATio 下载,文件名为 SupcanDemo_FirefoxCookie.zip


  方法二


  硕正套件从 1.0.84.0 版开始,增加了全局函数 SetCookie,使得您可以用另一种处理之:在 OnReady 事件中直接设置 Cookie ,而不必再修改 dynaload.js. 书写示例如下:
function OnReady(id)
{
  ...
  //判断浏览器 (略过)
  ...
  // ASP.Net 是:
  AF.func("setCookie", "ASP.NET_SessionId=<%= System.Web.HttpContext.Current.Session.SessionID %>");
  
  // JSP 是:
  AF.func("setCookie", "JSESSIONID=<%=request.getSession().getId()%>;Path=<%=request.getContextPath()%>");
  ...


  测试工具及其它


  如果问题仍然无法顺利解决,建议您跟踪 http 信息,看看里面的 Cookie 串是否正确,因为 Cookie 是附在 http 头上、随 http 一起发送出去的。
  这里给您一个最简单的监控工具 TcpTrace, 您可以从 http://pan.baidu.com/s/1o6IGmAu去下载。

  此外,本文中的 SessionId 都是以默认的名称 "ASP.NET_SessionId"、"JSESSIONID" 为例书写的,如果您的 sessionId 在后端单独设置过,则必须改成实际的名称,否则结果可想而知。