1

应用程序后台 安全性:应用程序都托管在私有外联网(和/或本地内联网 - 取决于安装实例)上。因此,虽然安全性很重要,但它并不像它是 Intranet 上的应用程序那么重要。然而,重要的是系统不能轻易被黑客入侵或劫持。

应用程序:该应用程序分为两部分:-

  • 类库 (dll)
  • 身份验证前端 ASP.NET 应用程序

该 dll 是前端身份验证应用程序的一部分,将添加到其他需要用户身份验证的应用程序(“消费者应用程序”)中。

身份验证应用程序是所有用户、他们有权访问的应用程序以及基于其用户名的权限级别的中央存储。

对于安装了 dll 的消费者应用程序,当最终用户点击要求他们登录的页面时,消费者应用程序会将它们与 appid 一起触发到身份验证应用程序 login.aspx 页面,用户登录,如果他们拥有所需的权限,然后是身份验证应用程序,将它们发送回消费者应用程序(通过带有加密数据的表单) - 其中包括有关用户是谁、用户名、实名、工作角色、组织等的基本数据......而且重要的是消费者应用程序的权限级别列表。

消费者应用程序然后获取该数据,并对其进行处理、解密等。并创建一个表单身份验证 cookie 并填充一个用户类和用户角色类 - 这一切都在 dll 本身内完成。

问题

现在这一切都很好,最初所有数据都存储在身份验证 cookie 中,在 cookie 的 userdata 部分中,但是这里是问题......

一个消费者应用程序(我们已经在内部编写了一个中央应用程序,可以拥有与单个用户(主要是应用程序管理员)相关联的大量权限(用户角色),因此我们需要可以保存大量数据的东西,超过身份验证 cookie 可以容纳的 4KB。

因此,我尝试将其放入会话变量中,最初是一个单个变量,其中所有发送的解密数据都放入一个名为“userdata”的会话变量中。然后我检查何时提出请求。

然而...

我遇到的第一个问题是身份验证 cookie 的寿命似乎比会话长,我想我已经通过将会话延长到 35 分钟(比 AuthCookie 长 5 分钟)解决了这个问题。

但是,当消费者应用程序程序员更改他们的代码(通过 Visual Studio 2010 在调试中运行 localhost)并刷新浏览器时,AuthCookie 仍然存在,但 Session 消失了。现在最初我使用的是默认的 InProc 会话模式,我猜这可能是问题所在。

我的假设正确吗?有没有办法以编程方式同步会话和 AuthCookie?

关于解决此问题的任何其他建议?

4

1 回答 1

1

每次您的应用程序刷新时(这可能在您更改代码时发生),但可能由于各种原因在服务器上发生,您的用户会话将被清除。

如果我没看错,您最可能想要做的是检查 Session_Start 中是否存在 cookie,并刷新会话数据以便将其加载回会话中。会话并不是世界上最稳定的东西,甚至会话超时也不总是你认为的那样

如果您还没有,请将 Global.asax 添加到您的项目中。如果是c#,编辑Global.asax.cs,或者VB,我认为是Global.asax.vb。

protected void Session_Start(object sender, EventArgs e)
{
// Check for Cookie, if it exists here, then load data into the session here.
}
于 2011-10-01T13:31:23.447 回答