php session不可用,php session 使用与安全
session基本用法实例
复制代码 代码如下:
// page1.php
session_start();
echo'Welcome to page #1';
/* 创建session变量并给session变量赋值*/$_SESSION['favcolor'] = 'green';
$_SESSION['animal'] = 'cat';
$_SESSION['time'] = time();
// 如果客户端使用cookie,可直接传递session到page2.php
echo'page 2';
// 如果客户端禁用cookie
echo'page 2';
/*
默认php5.2.1下,SID只有在cookie被写入的同时才会有值,如果该session
对应的cookie已经存在,那么SID将为(未定义)空*/
?>
// page2.php
session_start();
print$_SESSION['animal']; // 打印出单个session
var_dump($_SESSION); // 打印出page1.php传过来的session值
?>
2.3 使用session函数控制页面缓存.
很多情况下,我们要确定我们的网页是否在客户端缓存,或要设置缓存的有效时间,
比如我们的网页上有些敏感内容并且要登录才能查看,如果缓存到本地了,可以直
接打开本地的缓存就可以不登录而浏览到网页了.
使用session_cache_limiter('private');可以控制页面客户端缓存,必须在
session_start()之前调用.
端缓存控制.
控制客户端缓存时间用session_cache_expire(int);单位(s).也要在
session_start()前调用.
这只是使用session的情况下控制缓存的方法,我们还可以在header()中控制控制
页面的缓存.
2.4 删除session
要三步实现.
session_destroy(); // 第一步: 删除服务器端session文件,这使用setcookie
(session_name(),'',time()-3600); // 第二步: 删除实际的session:
$_SESSION= array(); // 第三步: 删除$_SESSION全局变量数组?>
2.5 session在PHP大型web应用中的使用对于访问量大的站点,用默认的session存
贮方式并不适合,目前最优的方法是用数据库教程存取session.这时,函数bool
session_set_save_handler( callbackopen, callbackclose, callbackread,
callbackwrite, callbackdestroy, callbackgc )就是提供给我们解决这个问题
的方案.
该函数使用的6个函数如下:
1. bool open() 用来打开会话存储机制,
2. bool close() 关闭会话存储操作.
3. mixde read() 从存储中装在session数据时使用这个函数4. bool write() 将
给定session ID的所有数据写到存储中5. bool destroy() 破坏与指定的会话ID
相关联的数据6. bool gc() 对存储系统中的数据进行垃圾收集例子见php手册
session_set_save_handler() 函数.
如果用类来处理,用session_set_save_handler(
array('className','open'),
array('className','close'),
array('className','read'),
array('className','write'),
array('className','destroy'),
array('className','gc'),
)
调用className类中的6个静态方法.className可以换对象就不用调用静态方法,但
是用静态成员不用生成对象,性能更好.
2.6 常用session函数:
bool session_start(void); 初始化session
bool session_destroy(void): 删除服务器端session关联文件。
stringsession_id() 当前session的id
stringsession_name() 当前存取的session名称,也就是客户端保存session ID的
cookie名称.默认PHPSESSID。arraysession_get_cookie_params() 与这个
session相关联的session的细节.
stringsession_cache_limiter() 控制使用session的页面的客户端缓存ini
session_cache_expire() 控制客户端缓存时间bool session_destroy() 删除服
务器端保存session信息的文件void session_set_cookie_params( int lifetime
[, stringpath [, stringdomain [, bool secure [, bool httponly]]]] )设置
与这个session相关联的session的细节bool session_set_save_handler(
callbackopen, callbackclose, callbackread, callbackwrite,
callbackdestroy, callbackgc )定义处理session的函数,(不是使用默认的方式)
bool session_regenerate_id([bool delete_old_session]) 分配新的session
id
2.7 session安全问题攻击者通过投入很大的精力尝试获得现有用户的有效会话
ID,有了会话id,他们就有可能能够在系统中拥有与此用户相同的能力.
因此,我们主要解决的思路是效验session ID的有效性.
if(!isset($_SESSION['user_agent'])){
$_SESSION['user_agent'] = $_SERVER['REMOTE_ADDR'].$_SERVER
['HTTP_USER_AGENT'];
}
/* 如果用户session ID是伪造*/elseif($_SESSION['user_agent'] !=
$_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT']) {
session_regenerate_id();
}
?>
2.8 Session通过cookie传递和通过SID传递的不同:
在php5.2.1的session的默认配置的情况下,当生成session的同时,服务器端将在
发送header set-cookie同时生成预定义超级全局变量SID(也就是说,写入cookie
和抛出SID是等价的.),当$_COOKIE['PHPSESSID']存在以后,将不再写入cookie,也
不再生成超级全局变量SID,此时,SID将是空的.
2.9 session使用实例<?php
/**
* 效验session的合法性*
*/functionsessionVerify() {
if(!isset($_SESSION['user_agent'])){
$_SESSION['user_agent'] = MD5($_SERVER['REMOTE_ADDR']
.$_SERVER['HTTP_USER_AGENT']);
}
/* 如果用户session ID是伪造,则重新分配session ID */elseif($_SESSION
['user_agent'] != MD5($_SERVER['REMOTE_ADDR']
. $_SERVER['HTTP_USER_AGENT'])) {
session_regenerate_id();
}
}
/**
* 销毁session
* 三步完美实现,不可漏*
*/functionsessionDestroy() {
session_destroy();
setcookie(session_name(),'',time()-3600);
$_SESSION= array();
}
?>
php session不可用,php session 使用与安全相关推荐
- Nginx+Tomcat实现高可用和Session会话共享
一.简介 对于生产环境有了一定规模的tomcat集群业务来说,要实现session会话共享,比较稳妥的方式就是使用数据库持久化session.为什么要持久化session(共享session)呢?因为 ...
- Spring Session - Cookie VS Session VS Token 以及 Session不一致问题的N种解决方案
文章目录 Cookie VS Session VS Token History Cookie Session Token Session不一致问题 Session不一致解决方案 nginx sessi ...
- 什么是Cookie和Session?—— Cookie和Session的区别?—— 一文教你理解清楚什么是Cookie和Session,以及常见的开发面试问题?
cookie和session区别 cookie和session 背景说明 1.cookie 1.1.定义 1.2.作用 1.3.组成(种类和参数) 1.3.1.会话 Cookies .永久性 Cook ...
- Javaweb Session与Cookie(自定义Session)
课程目标: 熟悉Cookie.Session底层实现原理.自定义缓存.自定义Token.表单重复提交解决方案.Servlet之Fileter解决XSS攻击. 一..会话管理入门 1.1 生活中会话 我 ...
- 第十八章 CSP Session 管理 - 与 CSP.Session 的Sessions
文章目录 第十八章 CSP Session 管理 - 与 CSP.Session 的Sessions 与 `CSP.Session` 的`Sessions` Session 会话创建 `Session ...
- spring session 退出登录 清理session
2019独角兽企业重金招聘Python工程师标准>>> spring session 退出登录 清理session 博客分类: spring /*** Allows creating ...
- java session 作用范围_ssm项目session使用及其作用域问题
这两天由于自己在前端用到ajax发起异步更新请求,发现ajax会暴露后端的接口地址,这个问题当然是避免不了的啦,前端都是明文.可怜于是就在百度.谷歌.QQ群里各种查询各种提问题,都说只能通过安全验证去 ...
- ajax得到session,Ajax如何使用Session
在Ajax中有时会使用到Session,在aspx.cs文件这样获取: string name = Session["name"]; 但是在Ajax中就不能这样获取Session, ...
- Nhibernate中session的状态与session.connection.state状态的差别的解释
在项目中用到了nhibernate,但是需要判断数据连接的状态,在NHIbernate的文档中找了半天,英文的中文的都看了一遍,都没找到相关的说明 .后来在Hibernate的论坛上才找到了一些说明. ...
- Cookie和Session-学习笔记03【Session快速入门、Session细节】
Java后端 学习路线 笔记汇总表[黑马程序员] Cookie和Session-学习笔记01[Cookie_快速入门.Cookie_细节] Cookie和Session-学习笔记02[Cookie案例 ...
最新文章
- 关于 sql server 基本使用的建议
- linux安装软件不同用户名密码,Linux的安装和基本命令
- Win7命令行局域网发消息图解
- [网络安全提高篇] 一〇二.Metasploit技术之基础用法万字详解及防御机理
- 回溯算法之购物车(0-1 背包问题)
- 利用Kinect将投影变得可直接用手操控
- 莫烦Matplotlib可视化第四章多图合并显示代码学习
- 读他:男人最怕听的十句话
- Linux系统编程7:入门篇之Linux项目自动化构建工具-Make/Makefile的超强使用指南
- java android长连接_基于Java Socket的自定义协议,实现Android与服务器的长连接(一)...
- 【numpy】numpy.random.uniform()函数
- android 正方形按钮,Android《FloatingActionButton》
- 详解Python中函数和模块的特殊属性__annotations__
- jsp 与html 如何结合使用方法,jsp中如何写javascript?
- 深入PHP变量存储结构
- Spring使用经验之Listener综述
- 从Python.org下载Python安装包下载很慢
- 计算机监控系统sacad,一套幼儿园智能化弱电CAD设计图,可以作为投标技术文件模板...
- android中界面布局文件放在,android界面布局详解.doc
- 汽车HUD抬头显示全产业链深度解析报告
热门文章
- Java魔法堂:JVM的运行模式
- 【转】每天一个linux命令(28):tar命令
- 「leetcode」 1382. 将二叉搜索树变平衡:【构造平衡二叉搜索树】详解
- 「leetcode」454.四数相加II:其实需要哈希的地方都能找到map的身影
- 苹果mac3D模型渲染软件:KeyShot
- 如何使用MacClean在Mac上释放磁盘空间?
- 如何开启/关闭Pages文稿上的字数统计功能?
- 手机界的革命-云手机(华为云)
- Docker 开篇 1 | 树莓派中搭建Docker
- JavaScript-2.4 改进的Hello程序,使用div,---ShinePans