立即注册 找回密码

QQ登录

只需一步,快速开始

第一站长论坛

搜索
1框架
查看: 95|回复: 0

PHP实现cookie跨域session共享的方法分析

[复制链接]
发表于 2019-9-8 12:53 | 显示全部楼层 |阅读模式
本文实例讲述了PHP实现cookie跨域session共享的方法。分享给大家供大家参考,具体如下:
做过web开辟的小同伴们都了解cookie和session,cookie是存储在客户端的,session是存储在服务器的。
本篇主要通过一些实践中的案例和大家分享一下踩到坑,重点说明白cookie跨域问题和session服务器共享问题,以php语言为使用语言进行说明。
先聊聊cookie
设置cookie无效
  1. setcookie("sso", "e589hR6VnO8K1CNQZ4PSP/LWGBhRKE5VckawQwl1TdE8d4Q5E7tW", 900);
复制代码
这个问题很多刚入门php的小伙们都会碰到。这个代码的本意应当是想设置cookie sso的有效期为15分钟,可是执行这个代码后发现没有效果。为什么呢?因为第三个参数expire表示的是过期的时间节点,而不是有效时间,所以如果希望设置cookie为15分钟,正确的做法应当是获取当前的时间戳加上15分钟。
setcookie这个函数还有path、domain参数都比较常用,强烈建议刚学php的小伙们多翻阅手册。php手册地址: http://php.net/manual/zh/index.php
获取cookie值获取不到
先看这样一段代码
  1. setcookie("sso", "e589hR6VnO8K1CNQZ4PSP/LWGBhRKE5VckawQwl1TdE8d4Q5E7tW", time() + 900);var_dump($_COOKIE["sso"]);
复制代码
要解决这个问题,要先了解一下setcookie后发生了什么?因为cookie是保存在客户端的,php是服务端语言,实际上setcookie之后只是在返回的http头增加一个cookie的头信息,告诉客户端需要设置一个酱紫的cookie,如下图:


php中setcookie返回的http头
而$_COOKIE这个数组里面保存客户端传递上来的cookie。自然第一次刷新的时候因为客户端没有相应的cookie值,所以$_COOKIE是没有sso的信息的。第一次请求过后,因为服务器设置了cookie sso,所以第一次请求过来客户端就有了cookie sso的信息,所以第二次请求的时候就会带上sso的信息,服务端就能通过$_COOKIE取到值了。
cookie跨域问题
这个可以说是cookie中一个比较热门的问题,面试的时候一般很爱聊这方面的问题。
跨域的业务需求大概是酱紫:用户在a.com进行了登录,希望在b.com也同步进行了登录。如果是同一个主域比较简单,可以通过setcookie中的domain参数进行设定:例如有x.a.com和xx.a.com,可以通过设置domain为a.com,从而a.com的所有二级域名都可以共享这一个cookie。基于安全方面的原因,在a.com下面设置domain为b.com是无效的。
那么是否真的没有办法可以实现这个了呢?这个还是有一些奇巧淫技的,这里介绍一种使用内框iframe的方法。
具体思路:在a.com下设置cookie后,嵌入一个iframe框链接b.com的页面,b.com设置好页面cookie后,再嵌入一个a.com的页面,然后通过parent.parent就可以调用最外层的a.com的js方法,从而进行跳转或者一些其它的操作。具体代码示例如下:
假设a.com有页面:login.php和callback.php,b.com有页面synclogin.php
a.com的login.php代码:
[code]login success...

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|第一站长论坛 ( 闽ICP备16019670号 )

GMT+8, 2019-10-21 10:07 , Processed in 0.061989 second(s), 24 queries .

Powered by Discuz! X3.4 © 2001-2013 Comsenz Inc & Style Design

本站提供网上自由讨论使用,所有言论内容来自互联网并不代表本站立场,本站不负任何责任.
如发现有侵权行为,请与我们联系. 我们将立刻从网站上删除,并向所有持版权者致最深歉意.
联系QQ:2837195923

快速回复 返回顶部 返回列表