【发布时间】:2016-06-17 05:28:42
【问题描述】:
我在与 Safari 的会话中存储 Guid 密钥时遇到问题。该代码在 IE、Chrome 和 Firefox 中运行良好,但出于某种原因 Safari 并未更新会话变量。这是问题的一个例子:
sessionOutputOne.InnerHtml = Session["TopicId"]; //Old topic ID d158e4f2-c0ac-41ce-8798-e936afaf67f8
Session["TopicId"] = someobject.GuidId.ToString();
sessionOutputTwo.InnerHtml = Session["TopicId"]; //Shows new topic Id f72850a4-c29f-4d1e-ab46-7939c097a002
如果我刷新页面,第一个 Session["TopicId"] 输出会在除 Safari 之外的所有浏览器中显示新的主题 ID (f72850a4-c29f-4d1e-ab46-7939c097a002),它会继续显示旧的 id (d158e4f2- c0ac-41ce-8798-e936afaf67f8)。
我已经根据其他stackoverflow线程排除了以下可能性:
设置会话变量后页面重定向无效。
会话变量未在 iframe 中设置,但网站中有用于 google 产品的 iframe。
我不想在这个会话变量中存储任何复杂的东西,只是一个转换为字符串的 guid。
Cookie 未在 Safari 中禁用,我的其他 Safari 浏览器上的客户也遇到了同样的问题。
关于此的其他线索:当我打开 Safari 的“私人浏览”模式时,会话变量确实设置成功。
提前感谢您对我还可以研究什么的任何见解。
更新:
所以情节变得越来越厚。我在我的根 Default.aspx.cs 文件中找到了一个 Response.Redirect,它将登录的用户重定向到一个子目录。注释掉这个重定向会使会话正常工作;但是,似乎甚至没有命中重定向。如果我将重定向替换为 Response.End() 以终止响应,则站点中的所有内容都会继续正常工作 - 只有当您直接点击主页而不是将登录用户重定向到他们的内容时,主页才会消失。
解决方案
感谢 Steven 对我的调试的持续帮助,我终于能够至少弄清楚发生了什么,如果不是为什么的话。出于某种原因,Safari 在加载我们的浏览主题页面时会触及我们的根 Default.aspx 文件(可能在幕后,不知何故)。 Default.aspx 在没有查询字符串变量的情况下重定向回浏览主题页面。然后,浏览页面将清除会话变量以将其设置为默认 topicid。很纠结,我知道。我的解决方案是检查 Default.aspx 中的 Session["TopicId"] 并让它使用 querystring 变量重定向到 Browse 页面,因为我不知道如何阻止 Safari 访问此页面。
【问题讨论】:
-
会话存储在 cookie 中。确保您没有在 Safari 中禁用 cookie。
-
谢谢。我已经确认在开发人员工具中设置了一个 asp.net_sessionid cookie。我已更新我的问题以包含此内容。