php及codeigniter使用session-cookie的方法(详解)


Posted in PHP onApril 06, 2017

1、读写cookie

<1>原生

setcookie('name','value',time)

设置失败,没有正常写入浏览器,测试失败,原因未知

<2>CI框架

$this->input->set_cookie("views","test10",1000);
echo $_COOKIE["views"];//此方法获取值时,如果值不存在会报错,当然可以先用isset($_COOKIE["views"])判断一下

<3>通过helper

$this->load->helper('cookie');//这行放在view也是可以的,随便
set_cookie('views','test10',1000);
echo get_cookie('views');//此方法获取值如果获取不到,会返回空,不会报错

2、读写session

<1>原生session

启动:

<?php
session_start();
?>

赋值:

$_SESSION['views'] = "test20";

取值:

echo "Session:". $_SESSION['views'];

存续时间:

会话。当浏览器关闭,cookie里面的phpsession就会清空,下次打开会重新生成一个

虽然服务器还保存着这个session。session的过期时间在php.ini里设置,参见另一篇文章php(codeigniter)安全性注意事项

<2>CI框架session

启动:

$this->load->library('session');//load必须在controller完成,当要使用session必须先load赋值:
$this->session->views = "test11";

取值:

echo "Session:". $_SESSION['views'];

存续时间:

客户端有2个小时的存续时间,当服务器的session被删除,因为客户端的session id还是有效的,所以当再次打开的时候,服务端会再创建一个跟客户端session id相同的session,当然是创建新id还是老id并不重要,因为只是id同名,里面是没有数据的

<3>区别

>两个session名称是不同的,一个叫phpsession,一个叫ci_session

>只能启动一个,不能两个都启动

>取值是相同的

>两个千万不要混用,应该全面放弃原生的方式

>原生phpsession的是随便访问的,ci_session是httponly的,这就意味着原生的session可能会被通过xxs攻击,通过js获取到cookie

<4>例外情况

有一种情况是这样的:

当此时已经存在ci_session,因为这个ci_是持久化的

//session_start();//没有启动原生的session
//$this->load->library('session');//没有启动ci的session
$_SESSION['views'] = "test23";//直接用原生的方式进行赋值
echo "Session:". $_SESSION['views'];//可以正常取值出来"test23"

通过查看cookie,发现没有原生session存在,只能是走的ci session,那么在服务器的session里找到这个文件,发现这个值没有写进去 如果有声明session_start(),他就会走原生的模式,会重新创建一个phpsession,并且值会写进去

如果什么都没声明,也没有赋值,直接取值,那么会报错,因为要使用ci_session必须要load,我们没有load就会报错,所以证明了,在用原生的方式进行赋值的时候,他相当于启动了session,启用了ci_session,但他又没有权限写入,这可以说是一个bug

<5>session如何运作

cookie的运作比较容易理解,就是写入到用户cookie,写什么读出来就是什么。只要是本站的cookie,就可以通过键值读出来。

session的值是存在服务器的,但是怎么知道这个值是哪个用户的?通过在用户cookie里存入那个session的文件名,而保存的值放在服务器同名的文件里面。说的盗取cookie指的就是盗取这个,重要的信息存在服务器上,但是这个被盗了也完蛋。所以,也不能相信cookie里存的这个session-key,应该做一个鉴权。

注意,写入session的同时,写session-key到用户的cookie里这个是自动完成的,这个存续时间应该是在服务器的php.ini里面配置。

以上这篇php及codeigniter使用session-cookie的方法(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php程序之die调试法 快速解决错误
Sep 17 PHP
一个PHP验证码类代码分享(已封装成类)
Jul 17 PHP
深入PHP中慎用双等于(==)的详解
Jun 06 PHP
PHP生成等比缩略图类和自定义函数分享
Jun 25 PHP
PHP获取表单所有复选框的值的方法
Aug 28 PHP
getimagesize获取图片尺寸实例
Nov 15 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
Dec 17 PHP
php通过递归方式复制目录和子目录的方法
Mar 13 PHP
PHP异常处理Exception类
Dec 11 PHP
CI框架中$this-&gt;load-&gt;library()用法分析
May 18 PHP
php cli模式下获取参数的方法
May 05 PHP
php进行md5加密简单实例方法
Sep 19 PHP
浅谈php(codeigniter)安全性注意事项
Apr 06 #PHP
详谈php ip2long 出现负数的原因及解决方法
Apr 05 #PHP
php生成0~1随机小数的方法(必看)
Apr 05 #PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
Apr 05 #PHP
php str_getcsv把字符串解析为数组的实现方法
Apr 05 #PHP
php 从指定数字中获取随机组合的简单方法(推荐)
Apr 05 #PHP
php 判断页面或图片是否经过gzip压缩的方法
Apr 05 #PHP
You might like
PHP 变量定义和变量替换的方法
2009/07/30 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
2018/03/31 PHP
PHP PDO数据库操作预处理与注意事项
2019/03/16 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
2019/04/10 PHP
用JS在浏览器中创建下载文件
2014/03/05 Javascript
javascript实现画不相交的圆
2015/04/07 Javascript
javascript另类方法实现htmlencode()与htmldecode()函数实例分析
2016/11/17 Javascript
nodejs操作mysql实现增删改查的实例
2017/05/28 NodeJs
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
如何使node也支持从url加载一个module详解
2018/06/05 Javascript
使用Vuex解决Vue中的身份验证问题
2018/09/28 Javascript
微信小程序开发实现消息推送
2020/11/18 Javascript
vue + node如何通过一个Txt文件批量生成MP3并压缩成Zip
2020/06/02 Javascript
vue style width a href动态拼接问题的解决
2020/08/07 Javascript
如何通过JS实现日历简单算法
2020/10/14 Javascript
vue项目如何监听localStorage或sessionStorage的变化
2021/01/04 Vue.js
Python的函数嵌套的使用方法
2014/01/24 Python
python实现逻辑回归的方法示例
2017/05/02 Python
python获取网页中所有图片并筛选指定分辨率的方法
2018/03/31 Python
网红编程语言Python将纳入高考你怎么看?
2018/06/07 Python
python 基于TCP协议的套接字编程详解
2019/06/29 Python
django的ORM操作 增加和查询
2019/07/26 Python
简单了解pytest测试框架setup和tearDown
2020/04/14 Python
win10下python3.8的PIL库安装过程
2020/06/08 Python
Python 图片处理库exifread详解
2021/02/25 Python
华纳兄弟工作室的官方授权商店:WB Shop
2018/11/30 全球购物
编辑求职信样本
2013/12/16 职场文书
副乡长民主生活会个人对照检查材料思想汇报
2014/10/01 职场文书
Python自动化测试PO模型封装过程详解
2021/06/22 Python
MySQL 那些常见的错误设计规范,你都知道吗
2021/07/16 MySQL
java如何实现socket连接方法封装
2021/09/25 Java/Android
python入门学习关于for else的特殊特性讲解
2021/11/20 Python
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
2022/04/13 Python
Win10/Win11 任务栏替换成经典样式
2022/04/19 数码科技
python画条形图的具体代码
2022/04/20 Python
PHP RabbitMQ消息列队
2022/05/11 PHP