搜索
首页php教程PHP源码php session 使用与安全

<script>ec(2);</script>

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使用实例 /**
* 效验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();
}
?>

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。