0

我想让用户自动重新登录我的 Flex 应用程序,它使用基本身份验证

顺便说一句,我已经注意到这个StackOverflow question,它是相关的,但没有解决注销客户端的问题。

例如,用户 A 登录后,用户 B 进入浏览器,进入登录屏幕(可能在新选项卡中)并登录。

这应该意味着我在 HTTP 标头中发送了用户 B 的凭据,并且由于这些凭据与用户 A 的不同,服务器会记录这一事实并创建一个新的单独会话。

但是,Flex 的 HTTP 代理会捕获标头并实际上忽略这些新凭据。

Flex 确实提供了一种方法来告诉服务器注销,并且 Flex 登录代码可以在每次发送凭据之前调用它,但这似乎是一个丑陋的解决方法。我希望能够做这个客户端。我也可以为基本身份验证使用非标准标头(因为我也控制服务器端身份验证),但这似乎也是一个丑陋的解决方法。

有什么方法可以简单地从 Flex 代码结束客户端的会话?例如,这可以通过 JavaScript 实现。

有没有办法像在 JavaScript 中那样直接在客户端使用 cookie?

我了解某些限制可能是出于安全考虑,但我所有的通信都是与“家庭”服务器进行的,因此应该可以避免这些限制。

4

2 回答 2

1

你在这里问了几个不同的问题。

您实际上不能手动结束基本身份验证“会话”(至少据我所知);充其量,您可以针对一种可变的 basic-auth 领域进行身份验证,这可能对您有用,也可能对您不起作用,但除此之外,您在浏览器实例的持续时间内会卡在第一个经过身份验证的会话中。通常不是最好的方法,除非您非常确定用户拥有机器,或者可以依赖于在每次会话后关闭浏览器。

那么,这至少留下了两个其他选择。第一种是使用 URLRequest 对象发送您的凭据(您引用的帖子,我写的,显示了如何做到这一点),并让您的 HTTP 响应返回一些表明凭据已被接受的内容——例如,GUID,也许,生成并存储在服务器上的某个会话表(在数据库意义上)中,也许。然后在连续的 HTTP 请求中,您可以在 HTTP 标头中发送该 GUID,或者作为每个 GET 或 POST 请求中的值(例如,类似于 Facebook 处理其 API 客户端的方式),检查该值的及时性服务器,如果一切顺利,继续。然后,要“注销”,您只需发送一个请求以使该 GUID 无效,在服务器上和您的 Flex 应用程序内部执行必要的清理,一切都应该没问题:

另一种方法是直接使用 cookie。不过,cookie 机制实际上主要是在 Flex 中为您处理的,因为浏览器代表您来回传递所有内容。例如,如果您发送带有用户名和密码的 URLRequest,而服务器使用任何类型的 cookie 进行响应,那么您之后发出的每个请求都将打包并发送相同的 cookie,所以在大多数情况下,您需要做的就是解析来自服务器的初始响应(以设置 Flex 应用程序的状态),假设 cookie 持续存在,当需要注销时,发送 URLRequest 以注销,在状态下终止服务器上的 cookie =200 做你的 Flex 应用程序清理,等等。不过,直接访问 cookie 值并不是世界上最简单的事情。

希望这会有所帮助。祝你好运!

于 2009-04-22T21:53:32.960 回答
0

另请注意这篇文章,其中详细介绍了 Flex 添加到 HTTP 请求中的一些令人难以置信的失真。

于 2009-04-23T06:34:19.293 回答