【发布时间】:2009-09-24 16:37:07
【问题描述】:
我的 global.asax 中有以下Session_Start
string myBrowser = Utils.SafeUserAgent(Request);
foreach (string bannedbrowser in BrowserBan.BrowsersToBan)
{
if (myBrowser.IndexOf(bannedbrowser, StringComparison.OrdinalIgnoreCase) > -1)
{
HttpContext.Current.Response.Redirect("/bannedBrowser.htm");
Session.Abandon();
break;
}
它可以防止代码转换器访问我的网站。但时不时我会收到一个错误提示
System.Web.HttpException: Session state has created a session id, but cannot
save it because the response was already flushed by the application.
at System.Web.SessionState.SessionIDManager.SaveSessionID(
HttpContext context, String id, Boolean& redirected, Boolean& cookieAdded)
at System.Web.SessionState.SessionStateModule.CreateSessionId()
at System.Web.SessionState.SessionStateModule.DelayedGetSessionId()
at System.Web.SessionState.SessionStateModule.ReleaseStateGetSessionID()
at System.Web.SessionState.SessionStateModule.OnReleaseState(Object source,
EventArgs eventArgs)
at System.Web.SessionState.SessionStateModule.OnEndRequest(Object source,
EventArgs eventArgs)
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web
.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step,
Boolean& completedSynchronously)
只有当我尝试通过(例如)Google Transcoder 访问它时才会发生这种情况,但我想了解它为什么会发生以及如何防止它发生。
我必须放弃会话,以便在刷新用户代理时重新评估。
【问题讨论】:
-
顺便说一句:在大多数情况下,您似乎正在做的事情(阻止某些浏览器访问页面)将被视为不好的做法。您可能依赖于客户端发送的 User-Agent 字符串,这很容易被欺骗。如果您只是想警告用户潜在的不兼容问题,这是合理的。但是从您使用的语言(“禁止浏览器”)来看,我认为这不仅仅是一个不兼容警告。当然,您可能已经知道这一点并且有这样做的理由。只是想确保您牢记这些陷阱。
-
它是一个移动网站,有时来自谷歌搜索的用户通过谷歌的网络转码器访问它,该转码器会删除所有内容并扼杀用户体验。有时人们/成员使用 gogole 转码器作为代理。
标签: c# global-asax