客户端禁用cookie后session的解决方法

如果禁用cookie理论上来讲, 会影响session: session基于cookie实现, session的SESSID利用cookie保存.

但是如果禁用了cookie之后, session就不能用了. 如果有用户恶意(选择)禁用cookie: 可以理解为用户不愿意使用我们的网站.

如果非要实现: 可以通过a链接实现

一、手动a链接: 用户自己给a链接的href

session_name(): 获取或者设置session名字(没有参数就是获取,有参数就是设置)
session_id(): 获取或者设置sessionID(没有就是获取,有就是设置)

1. 在保存session数据界面, 获取session信息(name和id), 嵌入到URL中.

// 保存session数据

// 开启session
session_start();

// 获取session信息
$name = session_name();
$id = session_id();

// 保存session数据
$_SESSION['name'] = 'jason';

// 给出一个链接
echo "<a href='session.php?{$name}={$id}'>点我</a>";

2. 在需要共享session数据的界面: 先获取session信息, 然后再获取session数据

// 获取session数据

// 改变session_start从cookie获取id的机制
// 接受数据
$id = $_GET[session_name()];

// 修改session_start的开启机制: 使用当前制定SESSID
session_id($id); // 注册sessionid

// 开启session
session_start(); // 不再从cookie获取,也不会自动创建新的

// 获取
print_r($_SESSION); // Array ( [name] => jason )

浏览器输出效果:

二、自动a链接: 通过修改session默认的机制(PHP配置文件php.ini)

1. 修改session默认的只允许使用cookie的原则

session.use_only_cookies = 1 改为 session.use_only_cookies = 0

2. 开启URL转换sessionid信息的配置

session.use_trans_sid = 0 改为 session.use_trans_sid = 1

以上修改完了之后: 系统会自动在a标签中加入sessionid信息, 而且还能在获取session数据界面自动的从a标签去获取sessionid信息

效果1: 所有的a标签都会自动加上session信息

// 保存session数据

// 开启session
session_start();

// 保存session数据
$_SESSION['name'] = 'jason';

// 给出一个链接
echo "<a href='session.php'>点我</a>";

效果2: session使用的时候,会自动的从a标签读取session信息

// 获取session数据

// 开启session
session_start(); // 不再从cookie获取,也不会自动创建新的

// 获取
print_r($_SESSION); // Array ( [name] => jason )

posted @ 2016-12-15 16:37  chenjiacheng  阅读(1319)  评论(0编辑  收藏  举报