ASP.NET Cookie读取遇空引用异常,单服务器故障求助
问题场景
登录页面创建名为Login的Cookie后,首页读取该Cookie时触发Object reference not set to an instance of an object错误(指向首页代码第二行)。5台部署服务器中仅一台出现此问题,Chrome、Edge、IE均能复现,且已确认Chrome客户端中该Cookie确实存在。
登录页面代码
HttpCookie cookie = new HttpCookie("Login"); cookie.Values["User"] = textBox.Text; cookie.HttpOnly = true; cookie.Path = Request.ApplicationPath; cookie.Expires = DateTime.Now.AddDays(7); Response.Cookies.Add(cookie);
首页读取代码
HttpCookie cookie = Request.Cookies["Login"]; string user = cookie.Values["User"];
排查与解决方法
添加空引用防护
先判断Cookie是否存在,再读取值,从代码层面避免空引用错误:string user = string.Empty; HttpCookie cookie = Request.Cookies["Login"]; if (cookie != null && cookie.Values["User"] != null) { user = cookie.Values["User"]; }或者使用C#空合并运算符简化:
HttpCookie cookie = Request.Cookies["Login"]; string user = cookie?.Values["User"] ?? string.Empty;检查服务器应用路径配置
异常服务器的Request.ApplicationPath可能返回非预期值,导致Cookie的Path范围受限,首页无法匹配读取。可直接将Cookie路径设为根路径测试:cookie.Path = "/";验证服务器时间同步
Cookie的过期时间依赖服务器本地时间,若该服务器时间与客户端偏差过大,可能导致Cookie被判定为过期失效,需同步服务器时间至正常范围。检查路由与域配置
确认登录页与首页的请求路径层级是否一致,异常服务器的路由规则可能导致路径匹配失败;若多服务器部署在不同子域,需为Cookie设置统一根域(如.yourdomain.com),确保跨子域可读取。
内容的提问来源于stack exchange,提问作者João Pedro Sousa
相关产品推荐
相关产品推荐

