.NET C# 会话变量未在 Safari 浏览器中更新

Posted

技术标签:

【中文标题】.NET C# 会话变量未在 Safari 浏览器中更新【英文标题】:.NET C# Session Variable Not Updating in Safari Browser 【发布时间】: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)。

我已经根据其他***线程排除了以下可能性:

    设置会话变量后页面重定向无效。

    会话变量未在 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。我已更新我的问题以包含此内容。 【参考方案1】:

您是否尝试过清除 cookie 并对其进行测试?看看你是否可以清除cookie。

Session.Remove("TopicId");

如果您可以清除 cookie,请尝试在清除后将 cookie 重置为新值。

Session.Add("TopicId",someObject.GuidId.ToString());

基于用户更新的更新: 根据您的情况,您是否尝试过:

Response.Redirect(url, false);

添加该参数 (false) 不会中止线程并继续执行该线程上的代码。让我知道结果。

【讨论】:

感谢您的出色建议。我可以将会话变量清空;但是,当我尝试使用新值添加会话变量时,它不会添加。 所以第一次添加就可以了。页面重新加载,cookie 被删除。页面再次重新加载,它不存在?试着先这样做,然后告诉我结果。 感谢您对故障排除的帮助。这帮助我获得了有关该问题的更多数据。我更新了我的问题以反映我的发现。 另一个很棒的建议。我什至在我的所有重定向中添加了“false”参数,但这并没有解决问题。额外的日志记录发现 Safari 三次重定向到同一页面,所以我正在尝试设置远程调试以找出原因。 chrome 或 firefox 是否也会多次重定向(可能是无意的不良行为)?

以上是关于.NET C# 会话变量未在 Safari 浏览器中更新的主要内容,如果未能解决你的问题,请参考以下文章

Angularjs - 未在 Safari 中添加授权标头

具有 CSS 变量和 @keyframes 的 CSS 动画未在 Safari 上更新

如何使用 C# 在 ASP.NET Core 3.1 MVC 中使用会话变量

会话变量未在函数中设置

会话变量未在实时服务器中传递[关闭]

flex-box 中的行换行未在 Safari 中换行