我正在为我的项目评估帕达林,并试图实现一个非常简单的身份验证方案:
namespace SampleSite
{
public class Login : Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Request.Form["login"] == "admin" && Request.Form["password"] == "123")
{
Session["username"] = "admin";
Response.Redirect("PostFiles.html");
}
else
{
Response.Redirect("Default.aspx");
}
}
}
}但是,当我的朋友在我调试时试图点击页面时,它对单个用户运行良好,这时会抛出一个NullReferenceException
Session["username"] = "admin";然后我们意识到它不适用于并发用户。
是否真的不支持并发会话?这是我遗漏的配置吗?
发布于 2014-05-05 14:32:49
事实证明,没有什么好的理由,手握的实验室有一个为cookie设置的域集。更糟糕的是,这个领域是毫无意义的。这可能是我们在内部进行的某种测试的残余,从未恢复到发布。
正在发生的情况是,配置中包含了以下内容:
<Cookies Domain="169.0.0.2" />这会导致会话cookie从任何客户端被剥离(除非它的IP恰好是169.0.0.2)。
这反过来又会在每个浏览器请求中生成一个新会话,从而有效地抛出会话变量。
将您的web.config更改为没有像这样的cookie域,一切都会好的:
<Cookies />在您的NullReferenceException代码中获得的Page是因为null页面上的Session对象。当达到服务的最大会话数(当每个请求生成一个新会话时都会快速发生),就会发生这种情况。
发布于 2014-05-02 03:42:55
肯定支持多个会话。默认情况下,支持10个并发会话。
我把这个快速验证测试页面放在一起:
class SessionTest : Page
{
protected void Page_Load(object sender, EventArgs e)
{
var newVariable = Request.Form["value"];
if (newVariable != null)
{
Session["TestVariable"] = newVariable;
}
}
protected override void Render(HtmlTextWriter writer)
{
var sessionVariable = Session["TestVariable"];
writer
.Html()
.Body()
.Form(t => t
[HtmlTextWriterAttribute.Id, "Test"]
["method", "POST"])
.Text(string.Format("CurrentValue: {0}", sessionVariable ?? "[null]"))
.Br()
.Input(t => t
[HtmlTextWriterAttribute.Type, "text"]
[HtmlTextWriterAttribute.Name, "value"]
[HtmlTextWriterAttribute.Maxlength, "32"])
.EndTag() // input
.Br()
.SubmitButton("Submit", "Submit")
.EndTag() // form
.Form(t => t
[HtmlTextWriterAttribute.Id, "Reload"]
["method", "POST"])
.SubmitButton("Reload", "Reload")
.EndTag() // form
.EndTag() // body
.EndTag(); // html
}
}它只显示当前会话的一个变量,并允许您更改它。我打开了两个浏览器,一个是IE浏览器,另一个是Chrome浏览器,这会产生两个会话,就像两台PC一样。然后,我从两个浏览器点击页面,它们显示了与预期不同的保存会话状态:


https://stackoverflow.com/questions/23394657
复制相似问题