phpsession和cookie

NGINX & PHP Cookie 会话中 PHPSESSID 缺少 HTTPOnly、Secure 属性解决方案 基于安全的考虑,需要给cookie加上Secure和HttpOnly属性,HttpOnly比较好理解,设置HttpOnly=true的cookie不能被js获取到,无法用document.cookie打出cookie的内容。cookie中的Secure指的是安全性。在WEB应用中,对于敏感业务,如:登录或者付款,需要使用HTTPS来保证内容的传输安全,而在用户成功获得授权之后,获得的客户端身份cookie如果没有设置为Secure,那么很有可能会被非HTTPS页面拿到,从而造成重要的身份泄露。 阅读详情

cookie和seesion一般都是放在一起讲,因为二者的关系很紧密,作用大致相同,但也有一定的区别,先介绍下cookie吧。

cookie是一种在客户浏览器端存储数据并以此来跟踪和识别用户的机制。保存的文件为文本文件,不过会加密处理。

当浏览器访问php页面时,服务器会把cookie的数据回送给http响应,当浏览器获取到该信息时,就会在客户端保存cookie的信息。

它一般在网站中有以下作用:

(1).记录访客的信息,比如访问网页的次数,或者记录用户的账号和密码实现自动登录

(2).可以在页面中传递值,这一个页面到另外一个页面,如果需要传变量过去就可以使用cookie传值

如何创建cookie:

bool setcookie(string name,string value,int expire,string path,string domain,int secure,boo httponly)

总共有7个参数:name 是创建的cookie的变量名,value是变量的值,expire是cookie的失效时间,path是cookie在服务器端的有效路径,domain是cookie的有效域名,secure是cookie是否只通过https连接有效,httponly代表是否只支持http传输(安全性问题,列举配置文件时说明)。请注意,cookie只适用于保存小数据。关于cookie的配置文件会放在seesion部分一起列举。

常用的就name,value,expire这三个参数,举个例子

setcookie("test","123","time()+60");

这是设置了一个名为test,值为123,存活时间为60秒的cookie。

读取cookie,按照上面的例子来:

$_COOKIE['test']
这样就可以读取到cookie的值了,不过事先最好用isset()函数判断一下是否有名为test的cookie

删除cookie:

如果没有设置cookie的失效时间,那么在关闭浏览器之后cookie便会自动被删除

setcookie("test","",time()-1);
将原来设置的cookie的值赋为空,然后时间设为负数就可以达到删除cookie的目的。
cookie的默认存储位置:C:\Users\[user name]\AppData\Roaming\Microsoft\Windows\Cookies

然后是session,专业一点的话来说,session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统所经过的时间,因此,session实际上是一个特定的时间概念。session英文意思是“会话”,打开网站到关闭网站这一整个过程就叫一个session(注:关闭网站是指全部的网页都关闭,退出浏览器)。在网站开发中,session是服务器端技术,利用这个技术,服务器在运行的时候可以为每个用户在服务器端创建一个session文件,便于用户下次访问的时候再调出。比如在电商网站中,你登录你的账号之后,可以看到自己曾经浏览过的商品和购买的商品,有些还能看到上次登录的时间等,这些功能都是由session实现的。

session可以保存的数据类型有:string,integer,double,bool,array,object。

如何启动会话:

session_start();//证明要启用session了

如何注册并使用会话:

$_SESSION['username']=admin;//声明了一个名为username值为admin的变量,数组的用法

删除某一个会话:

unset($_SESSION['username']);//删除名为username的会话
删除多个会话:

$_SESSION=array();//这样就可以删除所有的会话
或者

session_destory;//删除所有会话

以上是session的最基本操作,接下来介绍关于session保存的时间的设置,也就是它的生命周期,说到这,我们不得不先说一下session在客户端和服务器端之间到底发生了什么,我登录电商网站的时候,凭什么服务器就把我的购买记录显示出来了而不是别人的又或者不是新创建一个session。

其实,当客户端申请创建session的时候,服务器端会验证客户端发送的请求中是否包含SESSID,相当于是个唯一标识,如果有,那证明客户端之前已经创建过session,然后就会通过SESSID把属于这个客户端的session读取出来使用,如果不包含,服务器端就会帮客户端创建一个新的session并生成一个SESSID保存在服务器端,然后将SESSID通过http协议返回。

session在服务器端保存的位置在php.ini中通过设置session.save_path可以修改,windows的默认路径在C:/Windows/Temp,linuxd默认在/tmp或/var/lib/php/session

,开头名都是SESS,可以搜索一下,如图:下划线后面的那一串字符就是SESSID了。

这张图片就是发送请求时通过cookie传递的SESSID的值

通过上面的讲解,我们对session有更深一步的了解了,那么重新回到刚才我们要探讨的session的生命周期的问题,session的生命周期可以通过修改php.ini中的session.gc_maxlifetime来增加或减少,但是它的时间并不是按照单纯的时间长度来计算,举个例子,假如session设置的生命周期是20分钟,不是过了20分钟,刚创建的session就失效了(请注意不是删除,文章下面会具体说明session的垃圾回收机制),而是过了20分钟没人使用,再失效,再极端一点,假如我在session创建了的第19分59秒用了一个这个session,那么这个session不会在下一秒失效,而是重新计时,再来20分钟,20分钟内,又使用了,再重新计时,如此反复,直到过了20分钟没人使用的时候才失效。从上面那张图中我们可以发现很有趣的一个现象,传递SESSID的方式居然是用cookie传送的。那么问题来了,假如用户端把cookie禁用了,那我们的session该怎么办?相当于每发送一次请求就会创建一个新的session。现在一般有有如下几种解决方法:

方法一:

通过GET方法,用表单或者超链接传递session_id,代码如下:

发送页面:

$sessid=session_id();
<form id="form" name="form" method="post" action="index.php?PHPSESSID=$sessid">


接收页面:

<?php
$sessName=session_name();  //获取session的名字,默认是PHPSESSID
$sessId=$_GET[$sessName];  //获取通过表单传递过来的SESSID
session_id($sessId);       //设置session的id为表单传递的SESSID
?>

方法二:

使用SID常量,SID的内容是:PHPSESSID=SESSID,相当于在表单中,action可以直接写为:

action="index.php?'.SID.'"
接收的时候不变

方法三:

设置php.ini中的session.use_trans_sid=1来启用透明SID支持,让php自动跨页面传递session_sid

方法四:

使用数据库存储session_id,手动调用

以上便是一些普遍的解决方法。其实session还有一个用途,那就是防止用户直接输入url跳过登录等操作就可以查看数据等,这个操作是十分危险的,所以我们可以通过用户登录之后,把用户名用session存储起来,然后在其他页面判断是否为空,如果为空,那就证明是非法登录。

下面再介绍一下在php.ini文件中session和cookie的一些配置,比较重要:

session.name = PHPSESSID   //这个即是页面发送请求时的session的名字,默认是PHPSESSID,可以自己更改,更改之后重启apache生效

session.use_trans_sid = 0  //等于1代表启用,默认是0,如果启用的话,页面的url会自带session名=sessionid,对安全有一点影响,不建议开启

session.save_path =         //默认是注释掉了的,前面介绍过默认存储位置,如果想改变位置,修改这个配置即可

//以下三者构成session的垃圾回收机制

session.gc_maxlifetime=1440    //session的默认最大生命周期

session.gc_probabilty=1     //失效的session被删除的可能性

session.gc_divisor=1000    //和session.gc_probabilty一起构成session被删除的几率,这是默认是1/1000,session_start()一使用,就会有千分之一几率删除失效session

session.use_cookies=1     //是否使用cookie

session.cookie_lifetime = 0   //cookie的有效时间,默认是0,即关闭浏览器就失效

session.cookie_path = /   //设置cookie的有效路径

session.cookie_domain =  //设置cookie的有效域名

session.cookie_httponly =     //是否只支持Http传输,1或true代表有效,这个很有用处,可以防止cookie里面的信息被其它方式盗取,在setcookie里面可以设置,或者

  ini_set("session.cookie_httponly", 1)
cookie和session的主要区别:

1.cookie存储到客户端,session存储在服务器端

2.安全性相比,cookie的安全性比session要弱

3.cookie通过网络在客户端和服务器端传输,但是seesion不需要传输

4.cookie生命周期的计算方式是累计的,session是根据访问不访问计算,如果在有效时间访问了,则重新计算。

ABAP Platform 用户认证与单点登录,S/4HANA 项目里的安全入口设计 SAP S/4HANA 认证机制深度解析:从基础登录到企业级SSO 本文系统梳理了SAP ABAP平台的认证机制及其应用场景。文章指出,登录环节常被低估却至关重要,涉及业务访问、系统安全和用户体验的平衡。详细分析了多种认证方式的特点: 基础密码认证:需结合TLS/SSL确保安全,表单登录更适合用户交互 X.509证书认证:基于PKI体系,实现强身份验证但需完善吊销机制 Logon Ticket:传统SSO方案,存在DNS域限制和灵活性不足问题 SNC:为SAP GUI和RFC提供安全通信层 Kerberos 阅读详情

相关推荐

Flutter 完整学习文档 - 从入门到精通

Widget 就像乐高积木,Flutter 中所有的东西都是 Widget。一个按钮是 Widget,一段文字是 Widget,甚至布局、边距、对齐方式也是 Widget!"万物皆 Widget"

zwjapple的专栏 2316

Session Cookie的HttpOnly和secure属性

一、属性说明: 1 secure属性 当设置为true时,表示创建的 Cookie 会被以安全的形式向服务器传输,也就是只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该信息,所以不会被窃取到Cookie 的具体内容。 2 HttpOnly属性 如果在Cookie中设置了&quot;HttpOnly&quot;属性,那么通过程序(JS脚本、Applet等)将无法读取到Co...

严老板的技术梦想博客 1万+

Cibersort免疫浸润 --- 详细教程

免疫浸润是指免疫细胞如淋巴细胞、浆细胞、巨噬细胞等进入到组织或器官中,并在这些组织或器官中发挥免疫功能的过程。免疫细胞的浸润可以是炎症反应的一部分,也可以是针对感染、肿瘤或其他疾病的免疫应答的一部分。免疫浸润通过调节免疫反应和炎症反应的程度和类型,起到维护机体免疫平衡和清除异常细胞或病原体的作用。在某些情况下,免疫浸润可能导致炎症反应过度,引起组织损伤,例如自身免疫性疾病。因此,免疫浸润在许多疾病的诊断和治疗中都具有重要的意义。免疫浸润可以通过组织切片染色和免疫组织化学等方法观察和分析。

ZxVSaccount的博客 9107

php中session.cookie_httponly的作用

今天偶然看到一个设置ini_set(“session.cookie_httponly”,1) 去搜了下作用,我理解过来就是说为了避免浏览器其他的例如JavaScript,flash等脚本轻而易举的获取 或修改到服务端存储在cookie中的信息,这样可以防止XSS攻击。 ps: httponly是微软对cookie做的扩展。 Session数据保存在服务器端, 但是每一个客户端都需要保存一个Ses...

spz1025的博客 5717

从碰撞电离到雪崩击穿:Sentaurus仿真中的模型选择与验证艺术

本文深入探讨了Sentaurus TCAD中雪崩击穿模型的选取与验证方法,特别关注平行平面结的仿真实践。通过对比Chynoweth、van Overstraeten等主流模型的适用场景与精度差异,结合具体案例展示了从几何建模到边界条件设定的完整验证流程,并针对非理想因素提供了有效的补偿技术,助力工程师提升器件仿真的准确性与可靠性。

weixin_29074295的博客 592

一文搞定学术英语写作 (斯坦福SCI论文写作课程笔记)

0.前言: 本文基于斯坦福Kristin Sainani 教授的学术论文写作公开课——SCI论文写作(Writing in the Sciences)。在此基础上进行章节顺序的重排及部分内容的删减,以方便第一次进行英语学术论文写作的同学快速上手。 时间充足和想要系统学习英文学术写作的同学,十分建议观看完整课程视频,一定会受益匪浅!课程地址如下: 课程B站地址:https://www.bilibili.com/video/BV1zv41177JQ 1.论...

Ogmx的博客 3万+

PHPsession 和 cookie 的区别、存储机制

cookie 在网站中,http请求是无状态的。也就是说即使第一次和服务器连接并且登录成功后,第二次请求服务器的时候服务器仍然不能知道当前是哪个用户的请求。cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存到本地,当该用户第二次请求服务器响应的时候,就会自动的把上次请求存储的cookie数据携带给服务器,服务器通过浏览器携带的数据就能判...

我只是个小学生 能力有限 一直抱着学习的态度 1049

cookie共享和session共享实例演示

【代码】cookie共享和session共享实例演示。

title 792

AutoCAD提示找不到acdb24.dll、AcGe24.dll、AcPal.dll、AcUt.dll怎么办?

在我们安装了AutoCAD 2023版本以后,打开CAD,可能会出现dll文件丢失的情况,如下所示:1、由于找不到acdb24.dll,无法继续执行代码。重新安装程序可能解决此问题。2、由于找不到AcGe24.dll,无法继续执行代码。重新安装程序可能解决此问题。3、由于找不到AcPal.dll,无法继续执行代码。重新安装程序可能解决此问题。4、由于找不到AcUt.dll,无法继续执行代码。重新安装程序可能解决此问题。遇到AutoCAD启动系统错误,由于找不到dll文件该怎么处理呢?

huoxu369的博客 1万+

Android布局基础与UI设计入门:打造精美应用界面

恭喜你!现在你已经掌握了Android UI开发的基础知识,包括各种布局类型、常用控件的使用以及一些UI优化技巧。这些知识将帮助你设计出既美观又实用的Android应用界面。

m0_65382359的博客 2056

客户端禁用cookie,怎样实现session共享多个页面

一个简单的购物车,正常使用cookie时的代码如下 当客户端cookie被禁用时 方法一:在每个超链接上添加一个PHPSESSION=sessionID; 同时诶个页面加入 if(isset($_GET['PHPSESSION'])) {     session_id($_GET['PHPSESSION']); } session_start(); 方

u010417178的博客 3199

MTK Linux Charger驱动分析(二) - power_supply_core.c

的核心作用可以概括为:提供统一的电源管理框架;管理电源设备注册、属性访问、事件通知;封装sysfs 接口和 uevent 通知,屏蔽硬件细节;驱动开发者只需要实现,不关心底层通知和接口细节。简单来说,它是电源子系统的“大脑和中枢”,具体的电池/充电器只是“信息源”。

iTom1900 1488

基本名词概念复习

Cookie a small piece of data sent from a website and stored on the user’s computer by the user’s web browser while the user is browsing. Cookies were designed to be a reliable mechanism for websites t...

derlinst的博客 163

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

任意只读文件漏洞分析

任意只读文件漏洞分析

Spontaneous_0的博客 132

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

多域名THINKPHP利用MEMCACHE方式共享SESSION数据(转)

一、问题起源稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网站,用户系统是统一的,即一套用户名、密码在整个网站的各个模块中都是可以登录使用的。各个服务器共享用户数据是比较容易实现的,只需要在后端放个数据库服务器,各个服务器通过统一接口对用户数据进行访问即可。但还存在一个问题,就是用户在这个服务器登录之后,进入另一个服务器的别的模块时,仍...

weixin_34010566的博客 84

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

jmeter手写脚本,使用正则获取cookie(禁用cookies管理器)

注:这里以bugfree为例 1.bugfree登录时会有重定向,这会导致每个URL都会有。因此要手动获取cookie的时候,需要去掉重定向勾选 正则获取动态PHPsession 获取到值后,放到信息头提供使用, HTTP信息头管理器数据信息为全局变量,只要这里的数据获取正确,其他流程会自动获取到消息头信息 转载于:https://www.cnblogs.co...

weixin_30326515的博客 171

PHP 实现多服务器共享 SESSION 数据

一、问题起源 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网站,用户系统是统一的,即一套用户名、密码在整个网站的各个模块中都是可以登录使用的。各个服务器共享用户数据是比较容易实现的,只需要在后端放个数据库服务器,各个服务器通过统一接口对用户数据进行访问即可。但还存在一个问题,就是用户在这个服务器登录之后,进入另一个服务器的别的模块

Ai大模型,odoo,idempiere,metasfresh,低代码,ecshop数据采集发布接口,zencart,lightinthebox,shopex 数据采集接口 752

如何通过配置PHP.ini文件来提高Session的安全性?

在较老的PHP版本中,为了提高Session ID的随机性,你可能需要指定一个包含额外熵的文件。然而,在较新的PHP版本中,这已经不再是必需的,因为Session ID的生成已经足够安全。这将确保在Session ID未设置或无效时,不会自动创建新的Session ID。避免将Session数据保存在Web服务器的公共目录中,以防止被直接访问。然而,这将要求你手动管理Session ID的传递,通常通过URL重写来实现,这可能会增加复杂性和安全风险。在较新的PHP版本中,这个设置也不再那么重要。

长风破浪会有时的博客 718

通达OA11.7任意用户登录

通达OA11.7任意用户登录,需要admin用户在线,即可利用该漏洞。

qq_51950323的博客 1092

php修改session生存时间,修改session的过期(生存)时间

以下我以php为例,万变不离其宗,希望对大家都有用吧。session与cookie:了解过两者的众所都知道,有些信息保存到cookie,有些出于安全问题就不能直接存到浏览器,这就要用到session了。然而对于浏览器,一般都是默认20-30分钟自动销毁或者关闭浏览器就会销毁。这显示是很头疼的事情,比如我们要实现用户登陆功能,关闭浏览器就要重新登陆,这搞什么鬼?所以我们要去试图改变它们。网上众说纷纭...

weixin_33180221的博客 582

CI框架SESSION重写

这个是我平时用的是 PHP 自己的 Session 机制,是真正的 PHP Session,存储在服务器端,而不是用的 cookie 接口完全兼容于 CI 2.0.x 的 Session 类库,也就是说可以不修改原来的代码,直接替换成这个类库 具体接口内容请参考 http://codeigniter.org.cn/user_guide/libraries/sessions.html ...

weixin_30881367的博客 112

验证码绕过:PHPSESSION 删除后不校验?TaoToken 这样接入 Claude Code 排查

删除 PHPSESSION 后验证码不校验,先把两次重放请求头贴给 Claude Code 对照。用 TaoToken 接入 Claude Code:注册后在官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 创建 Key,Base URL 填 https://taotoken.net/api,写入 ANTHROPIC_BASE_URL 与 ANTHROPIC_API_KEY,再发最小请求确认通道可用。随后对比带与不带 PHPSESSION

weixin_35752122的博客 169

<?php if($_session[fig]==1){,php登录session

二、PHP SESSION 的工作原理 在解决问题之前,先来了解一下 PHP SESSION 的工作原理。在客户端(如浏览 器) 登录网站时, 被访问的 PHP 页面可以使用 session_......微博登录绑定页面:weibolist.php ?? ...

weixin_39789499的博客 586
上一篇: linux上给php安装mysqli扩展
下一篇: php文件上传和下载
UKey_
博客等级 码龄10年 258粉丝 186原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值