首次登录asp.net应用程序,存储一些会话值
Eg: Session["Test"]="Saving Sesison";
退出应用程序
第二次打开浏览器时,需要保留相同的会话值。
Eg: Session["Test"]="Saving Sesison";
我怎么能这样做,任何人都可以帮我解决一些进一步的问题。
if (!Page.IsPostBack)
{
if (Session["Test"] == null)
{
Binding data to repeater control(with out filter)
}
else
{
//Get Session value (To maintain session value across the browser)
var cookieSession = Request.Cookies["Test"]; //While opening the browser for the 2nd time,this line is getting null for all the browsers,but session is getting value for firefox & Chrome not for IE { Session["Test"] }
if (cookieSession != null &&!String.IsNullOrEmpty(cookieSession.Value))
{
Session["Test"] = cookieSession.Value;
}
Binding data to repeater control(with filter using session value)
}
}
//On Drop down selection.
protected void Dropdown_SelectedIndexChanged(object sender, EventArgs e)
{
Binding data to repeater control(based on the dropdown selected value)
Session["Test"] = Dropdown.SelectedItem.Text.ToString(); //To maintain the Dropdown selection all over the app
// Set it
if (Session["Test"] == null)
{
Session["Test"] = Guid.NewGuid().ToString();
var cookie = new HttpCookie("Test", (string)Session["Test"]);
Response.Cookies.Add(cookie);
}
}
答案 0 :(得分:0)
ASP.NET会话范围仅适用于特定会话。所以不可能拥有这种功能。
但是你可以以相同的方式使用Cache,它会存在,直到你使它为null或时间段超过。但请注意,它将存在于每个浏览器中。所以要么你需要使用不同的键(唯一键)而不是'test'
答案 1 :(得分:0)
您有几个选择。虽然在重新启动的浏览器之间会话应该是粘性的,假设它不是私密/隐身模式。如果您发现会话超时太快,可以在Web.config中扩展它
<system.web>
<sessionState timeout="10080" mode="InProc" />
</system.web>
timeout
在几分钟内。注意:如果您正在调试停止并启动调试器将重置您的会话。所以在IIS上重新部署应用程序也是如此。如果这对您来说是一个问题,您应该使用类似SQL会话状态提供程序的内容进行检查:http://msdn.microsoft.com/en-us/library/vstudio/h6bb9cz9(v=vs.100).aspx
处理此问题的另一种方法是在cookie中存储某种令牌(同样,仅当浏览器未处于隐身/私有模式且用户数据尚未刷新时才有效。)
// Set it
if (Session["Test"] == null)
{
Session["Test"] = Guid.NewGuid().ToString();
var cookie = new HttpCookie("Test", (string)Session["Test"]);
Response.Cookies.Add(cookie);
}
// Get it
var cookieSession = Request.Cookies["Test"];
if (cookieSession != null && !String.IsNullOrEmpty(cookieSession.Value))
{
Session["Test"] = cookieSession.Value;
}
作为使用SQL会话状态提供程序的注释,虽然是更持久的存储之一,但可能存在一些严重的开销要求。很容易收集正在跟踪的几场演出。
根据我的经验,如果您需要确定某些内容符合网站上的用户体验,那么Cookie和会话提供商的组合似乎效果最佳。
因此,您的下拉选择保护程序的问题是它总是错误的,不应该设置cookie。
protected void Dropdown_SelectedIndexChanged(object sender, EventArgs e)
{
//Binding data to repeater control(based on the dropdown selected value)
// add to Session
Session["Test"] = Dropdown.SelectedItem.Text.ToString();
// Add Cookie
var cookie = new HttpCookie("Test", (string)Session["Test"]);
Response.Cookies.Add(cookie);
}
现在要恢复数据,在尝试访问Session["Test"]
var cookieSession = Request.Cookies["Test"];
if (cookieSession != null && !String.IsNullOrEmpty(cookieSession.Value))
{
Session["Test"] = cookieSession.Value; // Should contain the selected text from the drop down
}