再来一贴100 求Session 过期

cjlxm1 2008-09-03 07:14:51
再来一贴,http://topic.csdn.net/u/20080901/16/399ebd3d-e81a-4f37-a94d-c58e68e24821.html没能很好的解决。
用vs2005+ajax 开发的一个系统,现想要session 记录用户ID,现取userid是放在基类得到的。
由于页面很多,争取只改PageArchitecture类中的EmpNo 。
主要如下:
namespace Asset.BaseInfo
{
public class PageArchitecture :Page
{
public PageArchitecture()
{
}
//得到用户ID
public string EmpNo
{
get
{
string sKo = "";
if (Session["LoginEmpno"] != null)
{
sKo = Session["LoginEmpno"].ToString();
HttpCookie hcooTmp = new HttpCookie("Def");
hcooTmp.Expires = DateTime.Now.AddHours(-1);
hcooTmp.Values.Add("Def1", Session["LoginEmpno"].ToString());
Response.AppendCookie(hcooTmp);
}
else
{
HttpCookie cookTmp = HttpContext.Current.Request.Cookies["Def"];
if (cookTmp == null)
{
HttpContext.Current.Response.Redirect("/btsl/asset/asset/Login.aspx?id=2");
}
else
{
sKo = cookTmp.Values["Def1"].ToString();
if (!IsPostBack)
{
HttpCookie hcooTmp = new HttpCookie("Def");
if (hcooTmp != null)
{
hcooTmp.Expires = DateTime.Now.AddHours(-1);
Response.AppendCookie(hcooTmp);
Session["LoginEmpno"] = sKo;
}
}
else
{
Session["LoginEmpno"] = sKo;
}
}
}
return sKo;
}
}

public class basePage : PageArchitecture //类继承
{
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
}
}
}

页面B0001 .cs
public partial class B0001 : basePage //类继承
{
...
取登录者的时候就用:
string loginempno=Empno;
现经常取不到Empno,有时候过不了两分钟就要求重新登录。。。
}
另 webconfig内:
<sessionState mode="InProc" cookieless="false" timeout="180" />
测试时,调试没感觉session过期情况,但用IIS查看时,有时不到五分钟就自动跳到登录页面了。

...全文
579 点赞 收藏 54
写回复
54 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
fengmifan 2011-04-26
看的有些晕
回复
zhihuixiaole 2008-09-19
xuexi and mark
回复
服务中的.asp.net的服务开启为自动
回复
孟子E章 2008-09-19
iis6吗?看看你的应用程序池的Web园是否为1
回复
shanying_0 2008-09-19
mark~~~~~~~
回复
cjlxm1 2008-09-19
[Quote=引用 50 楼 chuntian1983 的回复:]
服务中的.asp.net的服务开启为自动
[/Quote]

是自动启动的。
回复
cjlxm1 2008-09-19
[Quote=引用 49 楼 net_lover 的回复:]
iis6吗?看看你的应用程序池的Web园是否为1
[/Quote]

看了是1。
回复
yangh44 2008-09-18
Session的设置除了Web.config里设置,还需要在你发布应用程序的服务器上设置,在站点(虚拟目录)里,是要设置的。

建议使用Cookie。Cookie有效期时间是可以设置的,你可以设置长点或是长期有效,但如果是有期,
如:Cookie有效期设置为10天,那么必须要保证客户端的时间小于服务器时间+10天。当然,一般上将,服务器时间与客户段时间基本一致的。

回复
cjlxm1 2008-09-18
to skywolfY:
页面隔了一个小时没用后,开始操作,可单击按钮都没反应。(以前session失效,单击按钮时就打开login.aspx)
现在treeview中打开其它的页面,能获得登录ID。(session应该没有失效)

这样过了一段时间后,还是需重新打开这个页面,才能操作。
我用了ajax,不知与ajax有没有关系。
回复
single5210 2008-09-12
我也是来找答案的 帮顶
回复
xlong224 2008-09-12
mark up
回复
huangma1616 2008-09-11
有可能是使用 ajax 的原因。
回复
cjlxm1 2008-09-11
to skywolfY:
麻烦替我看看这样为什么还不行?
login.aspx登录页面,用户名、密码输入正确的时候把用户名对应的值保存到Session["LoginEmpno"]

public string EmpNo
{
get
{
string sKo = "";
if (Session["LoginEmpno"] != null) //session不为空,返回 Session["LoginEmpno"]
{
sKo = Session["LoginEmpno"].ToString();
}
else //session为空,
{
HttpCookie cookTmp = HttpContext.Current.Request.Cookies["Def"];
if (cookTmp == null) //cookie为空,则跳到login.aspx
{
HttpContext.Current.Response.Redirect("/btsl/asset/asset/Login.aspx?id=2");
}
else
{
sKo = cookTmp.Values["Def1"].ToString();
if (!IsPostBack)
{
HttpCookie hcooTmp = new HttpCookie("Def");
if (hcooTmp != null)
{
hcooTmp.Expires = DateTime.Now.AddSeconds(200);
Response.AppendCookie(hcooTmp);
Session["LoginEmpno"] = sKo;
}
}
else
{
Session["LoginEmpno"] = sKo;
}
}
}
return sKo;
}
}

这样为什么还不行啦?
回复
cjlxm1 2008-09-11
ajax确实是用了。
回复
ppp7p 2008-09-09
session 默认过期时间是20分钟,可能是其它的问题。
回复
cjlxm1 2008-09-09
[Quote=引用 32 楼 skywolfY 的回复:]
算了,我再提醒你一句。你的第18行代码错了。应该是
hcooTmp.Expires = DateTime.Now.AddSeconds(200);
这样的代码而不是
hcooTmp.Expires = DateTime.Now.AddHours(-1);
看下Expires 的msdn
[/Quote]

public string EmpNo
{
get
{
string sKo = "";
if (Session["LoginEmpno"] != null) //session不为空,则写进cookie里,存放在sKo
{
sKo = Session["LoginEmpno"].ToString();
}
else //session为空,
{
HttpCookie cookTmp = HttpContext.Current.Request.Cookies["Def"];
if (cookTmp == null) //cookie为空,则跳到login.aspx
{
HttpContext.Current.Response.Redirect("/btsl/asset/asset/Login.aspx?id=2");
}
else
{
sKo = cookTmp.Values["Def1"].ToString();
if (!IsPostBack)
{
HttpCookie hcooTmp = new HttpCookie("Def");
if (hcooTmp != null)
{
hcooTmp.Expires = DateTime.Now.AddHours(200);
Response.AppendCookie(hcooTmp);
Session["LoginEmpno"] = sKo;
}
}
else
{
Session["LoginEmpno"] = sKo;
}
}
}
return sKo;
}
}

哎,这样怎么还不行啦?
回复
delphi_new 2008-09-09
用cookies不用SESSION
回复
格拉 2008-09-08
帮顶
回复
songhuan 2008-09-08
关于序列化和反序列化的问题,你可以手动实现,以下是代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.Xml;
using System.IO;

namespace BofA.BL
{
public class SerializeEntity
{
public static String Serialize<T>(T data)
{
DataContractSerializer dcs = new DataContractSerializer(data.GetType());
StringBuilder sb = new StringBuilder();
XmlWriter writer = XmlWriter.Create(sb);
dcs.WriteObject(writer, data);
writer.Close();
return sb.ToString();
}

public static T DeSerialize<T>(String str)
{
DataContractSerializer dcs = new DataContractSerializer(typeof(T));
using (Stream memStream = new MemoryStream(Encoding.Unicode.GetBytes(str)))
{
XmlDictionaryReaderQuotas xdrq = new XmlDictionaryReaderQuotas() { MaxStringContentLength = 500000 };
XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(memStream, xdrq);
return (T)dcs.ReadObject(reader, true);
}
}
}
}
回复
Heaven_feather 2008-09-08
帮顶
回复
加载更多回复
相关推荐
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2008-09-03 07:14
社区公告

让您成为最强悍的C#开发者