【问题标题】:Asp.net access sessionstate from JavaScriptAsp.net 从 JavaScript 访问 sessionstate
【发布时间】:2012-02-29 22:20:20
【问题描述】:

我们的系统使用HttpContext.Current.Session("Client")来存储当前用户信息。

会话中的一个属性是 roleID,即 CType(HttpContext.Current.Session("Client"), Client).RoleId

通过检查RoleId的值,系统可以判断用户是否可以访问几个页面。

我已经在服务器端对其进行了验证。但对于呈现通知消息的最简单方法,我认为是使用 JavaScript。

那么是否有可能在 JavaScript 中获取会话值(甚至在外部 JavaScript 中)? 曲奇呢?为现有系统添加 Cookie 有什么缺点?

如果您有任何其他建议。

谢谢

是的,我在服务器端进行了验证。稍后,我也会在 DB 中添加限制。

结果:

我在 Web 服务中使用了 webMethod,因为它是一个母版页。

谢谢你的回答。

但提出了另一个问题:

Trigger/Prevent page event by using asynchronous webmethod return value in JavaScript

请给我一些关于这个问题的建议,谢谢。

【问题讨论】:

标签: javascript asp.net session


【解决方案1】:

您可以将其用作 cookie,但它会减慢您对每个资源的往返速度。因此,我不推荐这种方法。

一种选择是创建一个动态页面,该页面在全局中返回一个 javascript 对象,并打印出适当的变量。然后,您可以将其作为标准 script 标签包含在内。

另一种方法是进行 AJAX 调用。

请记住,您仍然应该始终验证基本请求并且永远不要信任客户端。

【讨论】:

  • 感谢您的回复,对于 AJAX CALL,您是指 WCF 还是 ashx?
  • 可能是网络方式。 WCF 可能有点矫枉过正。
  • jQuery + webmethod = 成功!
【解决方案2】:

向客户端发送角色并基于这些角色使用 JavaScript 进行业务逻辑存在安全风险。用户(黑客)知道如何操纵客户端代码来访问他们不应该访问的内容。

我建议只发送用户有权访问的内容或使用 AJAX 从客户端动态检索内容。

但要回答您的问题,不,您不能直接从客户端检索会话数据。

【讨论】:

  • 感谢您的回复,对于 AJAX CALL,您是指 WCF 还是 ashx?
  • @DanAn - 任何一个都可以。 ashx 页面可以非常强大且易于实现。只要记住不要给客户任何他们可以操纵的东西。
  • 谢谢@Chris Gessler,我知道你回复了很多。但是 Daniel A. White 确实回答了我关于 cookie 的问题,并提供了更多的解决方案并且很清楚。无论如何谢谢你,看看你能不能帮我这个stackoverflow.com/questions/9498576/…
【解决方案3】:

您可以制作 ashx 页面或 WCF 服务并使用 javascript 调用它。但不要返回 roleID 并在客户端检查该 ID,如果用户有权访问,则只返回 true / false。使用 jQuery ajax 调用 ashx 或 WCF 服务,您应该在 google 上找到大量示例

【讨论】:

  • 如果用户有访问权限则返回 true|false 与返回 roleID 并在客户端检查它是一样的。黑客可以轻松绕过服务请求并将返回值硬编码为“true”。
  • 据我所知,它仅用于通知客户端
  • 好的,所以只返回当前客户端的通知。如果这是一个银行应用程序并且由于黑客想要 5% 的 APR 而不是 10% 的 APR 而显示了错误的通知怎么办。打印的网页可用于尝试获取较低的 ARP。
  • 好的,但我看不出这有什么不同或更好,因为黑客也可以更改通知消息
  • 改成什么??如果 5% 的 ARP 消息从未提供给客户端,那将是一个猜谜游戏,它应该说什么。一个错误的词,银行就会知道它是无效的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 2012-02-04
  • 2011-11-25
  • 1970-01-01
相关资源
最近更新 更多