Session失效以及页面访问权限的处理方法

首先介绍一下:我的开发环境是VS2008

 

1、如何设置Session的失效时间


在web.config中的<authentication mode="Windows"/>后面添加下面的配置信息:

 

<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="30" />

在这里设置Session的失效时间是30分钟。

 

2、当Session失效后如何跳转的登录界面重新登录

 

a:关于这个问题,我先前的想法是这样的:

如果有类似一种触发器的东西,当Session失效后,直接触发这个触发器,重新跳转到登录界面重新登录,

但是这个方法不知道能不能实现,如果有实现的麻烦把实现的方法交流一下,先谢谢了。

 

b:我这里介绍现在的处理方法:

     首先,写个公共的类BasePage,并且重写这个类的OnInit方法;

     然后,让每个页面继承这个公共的类BasePage。

     1)新建的公共类BasePage代码如下:

   

   注明:在用户进行登录的时候,将用户的名称和用户的等级存放到Session中。

   2)每个页面继承这个基类BasePage

      说明:将每个页面后台中的,形如:public partial class _Default : System.Web.UI.Page

               改为:public partial class _Default :BasePage   即可。

       由于有框架的限制,当Session失效时,先跳转到过渡页面"Error.aspx",在通过这个页面跳转的登录页面即可。

 

c:仅仅这样的处理方式是不安全的,假如有一个页面(a),只有超级管理员能够操作,其他的操作人员都不能进入,

假如一般操作人员登录了系统,在Session没有失效时,只要把页面a的链接地址(前提是知道页面a的地址)打在地址栏中,同样可以登录到页面a中,这样是不安全的。

 

3、如何确保不同的用户对页面的访问权限

    对这个问题,又写了个方法 “bool  isError(int loginDegree,int userid,string moduleName)”

   这个方法包括用户的等级loginDegree,用户的id号userid,模块的名称moduleName

   在每个页面的Page_Load方法中都调用这个方法,如果该用户对这个模块有权限就登录,否则跳转到重新登录界面。

   这样处理就不会出现2中的不安全的问题了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 如果在使用iframe时出现sessionid丢失的问题,可能是由于浏览器的安全策略导致的。浏览器通常会阻止iframe访问其他域的cookie信息,因此可能会导致sessionid丢失。 为了解决这个问题,您可以尝试使用以下方法之一: 1.在主页面中设置cookie的域名为顶级域名(如example.com),而不是子域名(如www.example.com)。这样,所有子域名都可以访问cookie信息。 2.使用URL参数传递sessionid。在主页面中将sessionid附加到iframe URL中,然后在iframe中解析URL以获取sessionid。 3.使用postMessage API。主页面可以将sessionid发送到iframe中,而不是直接访问cookie信息。 希望这些方法能够解决您的问题。 ### 回答2: 当使用iframe进行页面嵌套时,如果嵌套的页面来自不同的域名,即跨域访问,由于浏览器的同源策略限制,父页面无法直接访问和操作嵌套的子页面,包括对子页面的cookie和session的访问。 同源策略是浏览器为了保护用户信息安全而采取的一种安全策略。简单来说,同源是指两个URL的协议、域名和端口完全相同。当浏览器发现当前访问的页面和子页面不符合同源策略时,就会禁止跨域的访问,也包括对session和cookie的操作。 因此,如果在父页面中设置了session或者在子页面中进行了登录操作,然后在iframe中进行跨域访问,父页面无法获取到子页面session信息,导致sessionid失效。 要解决这个问题,可以使用一些跨域通信的方法,例如HTML5中的postMessage API,它可以实现父页面和子页面之间的跨域通信。具体来说,子页面可以通过postMessage方法session信息传递给父页面,然后在父页面中进行处理和保存。 另外,还可以采用代理的方式来解决跨域问题。可以在父页面的服务器上设置一个代理接口,用于接收子页面的请求,并将请求发送到子页面所在的域名上。通过这种方式,可以绕过同源策略限制,实现对session信息的有效传递和处理。 总之,iframe跨域导致sessionid失效是因为浏览器的同源策略限制,通过使用跨域通信方法或者代理的方式,可以解决这个问题,确保session信息能够正确传递和使用。 ### 回答3: iframe跨域导致sessionid失效是由于浏览器的同源策略所造成的。同源策略要求只有在同一域名、端口和协议的情况下,才允许共享Cookie信息。当使用iframe加载其他域名的页面时,浏览器会认为这是跨域操作,因此不会向服务器发送包含sessionid的Cookie。 解决这个问题的方法有以下几种: 1. 使用跨域通信技术:例如,可以使用postMessage方法实现跨域通信,将sessionid通过消息传递给iframe内的页面,然后在该页面内进行处理。这样可以绕过同源策略限制,实现跨域传递和使用sessionid。 2. 设置Access-Control-Allow-Credentials头信息:如果你有控制iframe所在的域名的权限,可以在服务器端设置Response头信息中的Access-Control-Allow-Credentials为true。这样可以告诉浏览器允许跨域请求包含Cookie信息,从而解决sessionid失效的问题。 3. 使用代理页面:可以在同一域名下创建一个代理页面,通过该页面来加载不同域名的内容。在代理页面中,可以将sessionid从服务器端获取后传递给iframe内的页面,从而保证sessionid的有效性。 需要注意的是,跨域操作可能存在安全风险,因此在实施跨域解决方案时应谨慎,并确保只在必要的情况下进行跨域操作。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值