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

Php 如果用户登录到其他网站,则自动登录到当前网站,php,asp.net,session,login,asp-classic,Php,Asp.net,Session,Login,Asp Classic,我有大约100个用ASP经典编码的网站。每个网站都接受订单并将其存储在数据库中。但是,这些订单的付款必须在另一个网站上进行,也使用ASP classic编码。所有网站均为同一家公司所有,托管在同一台IIS服务器上,并使用相同的SQL server数据库 现在,用户通过输入一些个人信息进行注册,并登录其中一个网站(例如newjersey.com网站)并下订单。然后,他被重定向到支付网站(https上的payments.master-website.com),其中他的一些个人信息(地址、城市、装运州

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

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

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


长话短说

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

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


另一种方法是使用会话,尽管我不确定它是否可以使用不同的域名。因为它们都在同一台机器上,所以这是可能的,但我不是100%确定。您所问的问题称为单点登录(SSO),可以通过几种方式实现。例如,关于这个问题有很多主题:但它们都因个人需求而有所不同

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

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

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

  • 如果您无法更改到支付网站的链接,则可以尝试跳过步骤2并通过其ip验证用户,但这可能太危险。

    基于端口的验证是Microsoft提供的一种集中验证服务,为成员网站提供单次登录和核心配置文件服务。有关详细信息,请参阅以下Microsoft网站:


    如果无法在基础架构级别实现单一登录,则应使用允许不同受信任方的应用程序通过声明共享身份验证的

    这可以直接使用(SAML)或使用以下产品/标准完成:


    此外,您还可以查看哪些共享身份验证方案比SSO或身份联合更具共享性。

    会话在访问不同的域名,甚至子域时会过期。这很有效。但是,如果有人从网站a复制合法(加密)令牌,在另一个浏览器/计算机中打开网站B并发布(加密)令牌,会发生什么情况?您可以在加密值中使用一些计算机/浏览器信息,然后在解密时验证此人仍在同一台计算机上。通过SSL发布应该有另一层加密。您可以使用另一个选项实现OAuth,如建议的smirnov。另一个选项,因为它们都在相同的IIS设置和相同的服务器上运行,为什么不将购物车设置为主站点下的虚拟目录?这样你就不必担心通过网络发送数据了。这可能需要一些返工,但可能是今后最简单的解决办法。你为什么不接受罗伯茨的建议呢?这是一个很好的方法,你不能在不同的域之间共享会话,否则你就可以窃取别人的facebook会话或其他东西。无论什么时候你要付钱,都要照罗伯特说的去做。在数据库中存储与该用户相关的随机字符串。加密它,通过SSL访问你的新网站,解密它并检查数据库中的用户。也要检查时间(比如在创建后1-2分钟内)你听说过所谓的会话桥吗?@ TealMe:不,我没有。因为这是敏感信息,我会考虑在数据库中保存会话状态,如果看起来可行的话,从另一个应用程序访问它。对于不敏感的人来说,cookie是一种选择。@TechGirl:这个想法是正确的。但为此,我需要一种方法来查找属于同一浏览器用户/浏览器的两个会话。这看起来很简单。但是,如果有人从网站a复制了合法的令牌,在另一个浏览器/计算机中打开网站B并发布令牌,会发生什么情况?应该使用(验证IP+检查引用者+使用发布)的组合。您还可以在验证用户时从数据库中删除GUID,以便不能再次使用相同的GUID(url)。@SalmanA:您不需要