ASP.NET 防止直接从URL进入页面的方法
我在做ASP.NET开发的时候,在用户登录的这种界面都是在后台调数据库,用户名密码验证正确后进入页面。进入页面时,URL上直接带参数(如用户名,用来在页面中给后台调用)。...
我在做ASP.NET开发的时候,在用户登录的这种界面都是在后台调数据库,用户名密码验证正确后进入页面。进入页面时,URL上直接带参数(如用户名,用来在页面中给后台调用)。这时问题就出来了,如果我直接输入带参数的URL,其实也能进入这个页面,达到同样的效果,那用户登录岂不是没有意义了?我倒是想到了些方法,但都觉得太山寨,比如传参数的时候把密码也一起传了。在这儿想请教一下各位前辈,标准的做法应该怎么做呢?
展开
展开全部
标准的做法,是登陆成功后,在服务器建立一个session变量,赋以一个特定的值。这样的话,每次页面打开前都检测这个变量的值,如果与指定的值不相等,就说明还没登陆或者已过期,自动跳转到登陆页面要求重新登录;如果相等,就进入页面。session的生命周期默认是20分钟,就是说如果在20分钟内浏览器与服务器没有连接,session对象就会自动销毁,变量值也会清除。几乎所有需要用户登录的网页都是这样做的。除了session,还可以利用cookie或数据库,但很少见。
追问
多谢回复~但我有两点没太明白。1、用户在浏览器登录时,怎么获得Session的值呢?是在登录的界面赋给它,然后再以参数的形式加到url里再与Session比较吗?2、怎么做到让Session每20分钟更新一次呢?
追答
1、登陆的时候你只管登陆就行,这时候跟session是没有半毛钱关系的。当登陆的信息提交到服务器后,这时候要打开数据库,比对登录信息,如果核对正确,这时候才建立session变量的,此后服务器的内存中就会保留这个变量的值,当你再次打开网页时,这个值仍然存在的,因此每次判断这个值,如果存在,就说明你是曾经登录过的,是合法的用户;如果这个值不存在,就说明你不是经过登陆后进来的,是在地址栏直接输入网址进来的,是非法的用户!这时候可以提醒后退出,或者强行跳转到登录页面要求用户登录。
2、当这个session对象建立后,只要你在20分钟内打开了同一网站的任何一个页面或刷新了页面(换句话说就是只要浏览器与服务器之间发生了任何的数据往来活动),那么这个20分钟的时限就会自动顺延,也就是说只要你一直浏览网站的各个页面或每隔一段时间就刷新一下页面,网站就会认为你一直在线,session变量也就一直存在,那么你的登录状态也会一直保持下去。而只要你关闭了浏览器(注意是关闭整个浏览器,只关闭标签是不算的)或者超过20分钟页面也没有进行刷新,网站就会认为你离线了,这样它就会把和你的浏览器对应的session对象销毁。这么做也是为了安全考虑嘛。当然这个20分钟时限是可以修改的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询