web项目问题&结实web开发的朋友--高分

ksmark 2011-07-13 11:44:16
小弟最近刚接到一个WEB开发的一个项目,有几个问题请教一下,并且顺便结识一下各位高人。
问题:
我用Session记录用户登录的账号,可发现在网页登陆后不久,人走开上个厕所什么的一段时间后,这个session就失效了,可刚刚登录的界面中点击某按钮会执行数据库操作,这时页面就发生错误了,此时我该如何记录当前网页链接,然后先让用户退回到登录界面,然后登录后自动跳转到刚才发生错误的页面呢。
如果刚才发生错误的页面是在frameset中的某一个页面,此时退出到登录窗口,又该如何做呢,登录后该如何跳转呢?

结实朋友:
我想利用此次项目,结实一些有web开发经验的朋友。没有经验的也可以共同学习。最好在上海,因为我是个知恩图报的人,帮助过我的人我会记住他的,到时候可以方便联络,可以小聚一把,吃顿便饭什么的。。。
我的QQ:57766476
...全文
201 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lisliefor 2011-07-15
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 qingyun1029 的回复:]

引用 34 楼 qingyun1029 的回复:

引用 32 楼 lisliefor 的回复:

引用 27 楼 qingyun1029 的回复:
说白了,就是一个过滤器。。。

可以考虑,httpModule



比过滤器的作用还是要多的,System.Web.UI.Page中有很多方法,可以覆写,例如:
// 覆写初始化方法
protected overrid……
[/Quote]

学到了,对于httpModule了解不多,有空看看。
Lisliefor 2011-07-14
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 mark3798 的回复:]

我好像都在每一页的!IsPostBack中写了判断了session有没有失效,失效了就返回登录页面。
[/Quote]

如果写的!IsPostBack块中,只有第一次进入页面才有效,点击页面按钮不会进入这个session的校验,你把校验放到!IsPostBack的块外面应该就好了。

新建一个.cs文件,继承自System.Web.UI.Page,实现ITransfer接口,以下就是一个BasePage.cs的例子:

using System;
using System.Configuration;

using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

using System.Collections;
using System.Text.RegularExpressions;
using ATA.OLSD.Common;
using ATA.OLSD.OrgMng.Entity;

namespace ATA.OLSD.OrgMng.Common
{
public class BagePage : System.Web.UI.Page, ATA.OLSD.OrgMng.Common.ITransfer
{

public ATA.OLSD.OrgMng.Entity.TransferClass _TransferObject;
ATA.OLSD.Common.RijndaelEncrypt encrypt = new ATA.OLSD.Common.RijndaelEncrypt();

/// <summary>
/// 机构类型枚举
/// </summary>
public enum OrganizationType
{
ATA_Admin = 1,
zyzx,
cbjg1,
cbjg2,
pxjg,
pxd
};

public BagePage()
{
_TransferObject = new ATA.OLSD.OrgMng.Entity.TransferClass();
}




public TransferClass TransferObject
{
get
{
return this._TransferObject;
}
set
{
this._TransferObject = value;
}
}

protected override void OnInit(EventArgs e)
{
// 这里就有校验session的代码
try
{
base.OnInit(e);
//this.Error += new EventHandler(Page_Error);
if (Session == null || Session.Count == 0 || Session["UserCode"] == null)
{
if (Request.Url.ToString().ToUpper().IndexOf("LOGIN.ASPX") != -1
|| Request.Url.ToString().ToUpper().IndexOf("LOGOUT.ASPX") != -1
|| Request.Url.ToString().ToUpper().IndexOf("ATALOGIN.ASPX") != -1)
{
return;
}
//else
//HttpCookie UrlCook = Request.Cookies["AURL"];
//if (UrlCook != null)
//{
// //Response.Redirect("");

//}
RedirectToLogin();
}
//else
//{
// Redirec
// if (!CheckRightWithInPage())
// {tToLogin();
// }
//}
}
catch (Exception ex)
{
Log log = new Log("File_Log");
log.Error(ex.Message);
}


}
}


然后,你所有的页面都继承这个basepage就好了,它里面还可以放一些登录校验的方法,存取(session或cookie)用户信息的方法。
ksmark 2011-07-14
  • 打赏
  • 举报
回复
TO:indusl
你下面的代码。
如果我有很多用户,且这些用户都是人家自己通过注册页面自己添加的,我怎么都写到session_start中呢。
估计这样中做法不行。
void Session_Start(object sender, EventArgs e)
{
//在新会话启动时运行的代码
if(Session["xxxx"]==null){
Reponse.Redirect("Login.aspx");

}


ksmark 2011-07-14
  • 打赏
  • 举报
回复
楼上的兄弟,能否留下联络方式。方便联络呢。QQ也行啊。
给分就没有问题了。

我好像都在每一页的!IsPostBack中写了判断了session有没有失效,失效了就返回登录页面。
我没有您说的basepage。怎么办?我如何添加呢,又该怎么做呢。
留个Q给我吧。这个回复太费时间了。呵呵。拜托啦。
Lisliefor 2011-07-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 mark3798 的回复:]
然后先让用户退回到登录界面,然后登录后自动跳转到刚才发生错误的页面呢。
[/Quote]

在倒向登录页面时,在url中(或者session、cookie)保存当前页面地址,登录后,直接跳转这个地址。
Lisliefor 2011-07-14
  • 打赏
  • 举报
回复
我在上海,吃饭就不必要了,csdn给点分吧~ - -
Lisliefor 2011-07-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 mark3798 的回复:]
我用Session记录用户登录的账号,可发现在网页登陆后不久,人走开上个厕所什么的一段时间后,这个session就失效了,可刚刚登录的界面中点击某按钮会执行数据库操作,这时页面就发生错误了,此时我该如何记录当前网页链接,然后先让用户退回到登录界面,然后登录后自动跳转到刚才发生错误的页面呢。
[/Quote]

如果项目是webform做的,那么你在页面的所有请求必然先进入页面的Page_Load方法,在Page_Load方法中,校验session是否存在,不存在则倒向登录页面(这个校验逻辑不要写在!IsPostBack的块中),如果你有使用basePage,那么你可以在BasePage的Page_Load中统一做校验,这样就不至于在每个页面添加这段校验代码了。
这种设计是必然要考虑到的,不管是程序的健壮性也好,还是安全性也好(同样适用于一些权限检查)。

如果项目使用asp.net mvc做的,那就再简单不过了,定义一些filter,为action添加filter。
qingYun1029 2011-07-14
  • 打赏
  • 举报
回复
已经加为好友了。。。
ksmark 2011-07-14
  • 打赏
  • 举报
回复
qingYun1029

(青云-北京CFO)
你在上海怎么不加我QQ呢。或者我加你也可以啊。

还有感谢
wxr0323

(子夜)
您的空间里面的材料,写的真好。正在考虑使用呢。
全局变量 2011-07-14
  • 打赏
  • 举报
回复
上海!?,还是眼神交流难啊。
qingYun1029 2011-07-14
  • 打赏
  • 举报
回复
终于有人回复了。。。
lml926it 2011-07-14
  • 打赏
  • 举报
回复
453376236 我是菜鸟我怕谁 美女也不怕 来吧
indusl 2011-07-14
  • 打赏
  • 举报
回复
在你的Global.asax
indusl 2011-07-14
  • 打赏
  • 举报
回复
在你的Gloab.asx

void Application_Start(object sender, EventArgs e)
{
//在应用程序启动时运行的代码

}

void Application_End(object sender, EventArgs e)
{
//在应用程序关闭时运行的代码

}

void Application_Error(object sender, EventArgs e)
{
//在出现未处理的错误时运行的代码

}

void Session_Start(object sender, EventArgs e)
{
//在新会话启动时运行的代码
if(Session["xxxx"]==null){
Reponse.Redirect("Login.aspx");

}


}

void Session_End(object sender, EventArgs e)
{
//在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式
//设置为 StateServer 或 SQLServer,则不会引发该事件。

}

void Application_BeginRequest(object sender, EventArgs e)
{
Context.Items["BeginRequestTickCount"] = A.GetTickCount();
}
hookyzlr 2011-07-14
  • 打赏
  • 举报
回复
session 不稳定,应该是你session存储方式有关系,session存在内存中,会比较不稳定。
你可以尝试吧session的存储方式改成stateserver

至于其他的错误,你也没有是什么错误,就不好说了。
ruanwei1987 2011-07-14
  • 打赏
  • 举报
回复
他们都只交往女性
lijing3333 2011-07-14
  • 打赏
  • 举报
回复
Response.Redirect("login.aspx?url=" + Request.Url.AbsoluteUri);

if (!string.IsNullOrEmpty(Request.QueryString["url"]))
{
Response.Redirect(Request.QueryString["url"]);
}
ksmark 2011-07-14
  • 打赏
  • 举报
回复
怎么木有人留下QQ呢。楼上的弟兄们给我留一个或者加我啊。
如果还有小问题,可以方便联络啊。
qingYun1029 2011-07-14
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 qingyun1029 的回复:]

引用 32 楼 lisliefor 的回复:

引用 27 楼 qingyun1029 的回复:
说白了,就是一个过滤器。。。

可以考虑,httpModule



比过滤器的作用还是要多的,System.Web.UI.Page中有很多方法,可以覆写,例如:
// 覆写初始化方法
protected override void OnInit(ByVal e ……
[/Quote]

你说远了。。。

这里面用到的事件不多。。。
qingYun1029 2011-07-14
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 lisliefor 的回复:]

引用 27 楼 qingyun1029 的回复:
说白了,就是一个过滤器。。。

可以考虑,httpModule



比过滤器的作用还是要多的,System.Web.UI.Page中有很多方法,可以覆写,例如:
// 覆写初始化方法
protected override void OnInit(ByVal e As EventArgs) {}

// 覆……
[/Quote]

嘿嘿,你说原来。。。

生命周期事件基本上都可以在httpmodul和httphandler模块执行的时候的找到。。。

httpmodul是http请求的必经之路。。

所以在这个里面处理肯定比什么basepage来得简洁。。。
加载更多回复(15)

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧