asp.net 里面有没有办法不用在每个后台页面都判断是否登录,而统一判断?

[复制链接]
查看11 | 回复10 | 2021-1-27 07:20:02 | 显示全部楼层 |阅读模式
大神们,如题。
我感觉这个问题我纠结很久了。。。
我之前用session的。。
但是session人一多同时使用的就慢
所以请问这个该怎么办?
我是vs里面创建的网站,不是创建的项目,我之前了解说写在类里面。但是我如果不用项目的话,类应该写在哪里?怎么调用?
分 -->
回复

使用道具 举报

千问 | 2021-1-27 07:20:02 | 显示全部楼层
继承一个基类。在基类中的load事件判断就可以了
http://blog.csdn.net/hanjun0612/article/details/50509429
回复

使用道具 举报

千问 | 2021-1-27 07:20:02 | 显示全部楼层
写一个单独的基类页类,其它页全部继承它,而不是默认的System.Web.UI.Page
回复

使用道具 举报

千问 | 2021-1-27 07:20:02 | 显示全部楼层
可以是可以,上面的解决方法都会常用的。
只是这解决的是重复代码的问题,并不能解决你所说的session慢的问题。
应为即使你封装了判断登录的逻辑,它里面还是读取session去判断的。
session并不慢,你可能要检查一下慢在哪里。

回复

使用道具 举报

千问 | 2021-1-27 07:20:02 | 显示全部楼层
你是webform还是mvc
webform:每个页面继承一个类比如BasePage,去验证,参考http://blog.csdn.net/fanbin168/article/details/49404233
mvc用AuthorizeAttribtue
回复

使用道具 举报

千问 | 2021-1-27 07:20:02 | 显示全部楼层
basepage
或者
httphandler之类的都可以
回复

使用道具 举报

千问 | 2021-1-27 07:20:02 | 显示全部楼层
人一多是你的代码有问题导致的吧,或者就是达到了服务器承载压力
回复

使用道具 举报

千问 | 2021-1-27 07:20:02 | 显示全部楼层

publicclassBasePage:Page
{
publicBasePage(){}
protectedoverridevoidOnInit(EventArgse)
{
if(Session["user"]==null)
{
Response.Redirect("~/login.aspx?action=out");
}
base.OnInit(e);
}
}

然后在index.aspx.cs里这样写

publicpartialclassindex:BasePage

就OK了
回复

使用道具 举报

千问 | 2021-1-27 07:20:02 | 显示全部楼层
引用7楼diaodiaop的回复:
publicclassBasePage:Page
{
publicBasePage(){}
protectedoverridevoidOnInit(EventArgse)
{
if(Session["user"]==null)
{
Response.Redirect("~/login.aspx?action=out");
}
base.OnInit(e);
}
}

然后在index.aspx.cs里这样写

publicpartialclassindex:BasePage

就OK了

支持,意思就是你写一个UI基类,在基类里面判断登录状态,需要登录才能访问的页面就继承这个基类。
回复

使用道具 举报

千问 | 2021-1-27 07:20:02 | 显示全部楼层
session是肯定要的,只不过正真的企业服务器肯定是负载均衡的,人家的单点登入也是用一个专门的服务器来放缓存,也有专门的服务器来发放令牌结合客户端的cookie,你一台电脑当然干不了人家几台电脑干的事,主要还不是你电脑内存小,而是你session的策略有问题,比如说你不需要缓存整个session对象,而是用guid构造一个标识符,这就比用session占用的内存小了很多
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行