如果用户登录到其他网站,则自动登录当前网站

Sal*_*n A 9 php asp.net session login asp-classic

我有大约100个用ASP经典编码的网站.每个网站都接受订单并将其存储在数据库中.但是,这些订单的支付必须在另一个网站上进行,也可以用ASP classic编码.所有网站都归同一家公司所有,托管在同一个IIS服务器上并使用相同的SQL Server数据库.

现在,用户通过输入一些个人信息进行注册并登录到其中一个网站(例如website-for-newjersey.com)并下订单.然后,他被重定向到支付网站(https上的payments.master-website.com),其中包含他的一些个人信息(地址,城市,运输状态;信用卡持有人姓名等;等).在该页面上输入信用卡特定信息.

由于该页面上显示的信息的敏感性,用户必须先登录到付款网站,然后才能查看预先填写的付款表单.我不希望用户登录两次(每个网站一次).是否有可靠的方法来检查用户是否使用经典ASP 登录到引用网站.


长话短说

  • 在网站上BI需要检查访问者是否登录到网站A.
  • 在网站上,BI需要来自网站A的ID会话变量
  • 两个网站都使用相同的数据库服
  • 我需要明确的指示
  • 如果它是通用/可移植的,则可以接受PHP或ASP.NET解决方案

Rob*_*ert 9

从调用站点,您可以创建一个guid或其他随机生成的值.将其存储在数据库中的用户记录(设置为在指定时间段内到期),加密并通过SSL将其传递到解密后的支付站点,然后与数据库进行比较.如果匹配则用户登录,如果不匹配则要求用户登录.

另一种方法,虽然我不确定它可以使用不同的域名来完成使用会话.因为它们都在同一台机器上,所以我可能不会100%肯定.


ale*_*lex 5

您问的是所谓的单点登录 (SSO),可以通过多种方式实现。关于这个问题有很多话题,例如:您最喜欢的跨域 cookie 共享方法是什么?但它们都因个人要求而异。

在您的情况下,您有不同的域(因此您不能在它们之间共享 cookie),您混合使用 http 和 https(这可能是一个问题)并且您有许多应用程序,因此您不会进行太多更改。

所以我建议考虑罗伯特的建议:

  1. 当用户第一次通过身份验证(网站 A)时,您会在数据库中保存一个 GUID。为包含 GUID、用户 ID、IP 和时间戳列的会话添加新表或将其保存为订单数据的一部分。将 GUID 存储在会话对象中。
  2. 在具有支付站点链接的页面上,将其设置在查询字符串中或作为隐藏变量(如果它是表单)。
  3. 在另一个域(网站 B)上检查 GUID,然后在数据库中查找。如果它不是太旧,则对用户进行身份验证,否则将他重定向到登录页面。

如果您无法更改支付站点的链接,那么您可以尝试跳过第 2 步并通过他的 ip 验证用户,但这可能风险太大。

  • @SalmanA:您不保存 GUID。相反,您可以保存*并更新*每次由源站点在重定向时生成的*随机 UUID*。然后,在目标站点上收到 UUID 后,将其从数据库中清除。这意味着您的恶作剧用户必须“阻止”他自己的重定向(否则 UUID 将被停用),**并且**必须在 5 秒内从另一台计算机复制并发布 GUID。正常的 302 重定向不会花费这么长时间,因此所有早于几秒的 UUID 都可以安全地被视为无效。 (2认同)