【发布时间】:2014-12-04 17:22:34
【问题描述】:
我尝试使用 Amazon Web Services EC2 来测试我正在开发的 IIS/ASP.NET 应用程序,并且我的登录工作正常,但 ASP.NET 会话似乎在重新加载页面或移动到另一个页面。
我的登录表单页面中的 Page_Load 代码(会话设置正确,直到我移动页面或刷新登录表单页面)
protected void Page_Load(object sender, EventArgs e)
{
if(Page.IsPostBack)
{
NameValueCollection nvc = Request.Form;
string username = nvc["username"];
string password = nvc["password"];
Hydra.WebService1SoapClient client = new Hydra.WebService1SoapClient();
string sid = client.LoginSession(username, password);
if (sid != "Incorrect details")
HttpContext.Current.Session["loggedin"] = true;
else
HttpContext.Current.Session["loggedin"] = false;
}
}
下面是来自我的显示页面,用于显示会话数据。
<% if (HttpContext.Current.Session["loggedin"] == null || (bool)HttpContext.Current.Session["loggedin"] == false)
{ %>
<a class="menu" href="register.php">Create Account</a>
<% } else { %>
<a class="menu" href="hd.php">Dashboard</a> <a class="menu" href="ticketlist.php">Tickets</a> <a class="menu" href="admin/index.php">Admin</a>
<% } %>
Value: <% Response.Write("" + HttpContext.Current.Session["loggedin"] + " <br /> SID? " + HttpContext.Current.Session.SessionID); %>
我已经在我的本地 IIS 系统上对此进行了测试,它可以正常工作(会话是持久的)。
那么我的问题是: AWS 上的某些东西不喜欢 InProc 会话状态存储还是有其他问题的原因?
【问题讨论】:
-
您是否在负载均衡器后面运行多个 ec2 实例?还是只有一个?
-
@E.J.Brennan 不,它是单个实例,没有负载平衡,最大 iis 工作人员设置为 1,iis 设置检查会话状态是否为 improc,超时 20 分钟,这些请求在一分钟内。
-
如果您使用 InProc 会话状态,则只需切换到 Sql 数据库以保持会话。它更可靠,您不必担心部署会杀死会话。设置 Sql 数据库支持的 ASP.NET 会话状态也非常容易。
-
看来我的问题与对同一个应用程序的 SOAP 调用有关,导致它在会话中做一些时髦的事情
标签: c# asp.net session amazon-web-services amazon-ec2