当前位置:首页 > 服务端 > PHP-会话控制Cookie和Session

PHP-会话控制Cookie和Session

2022年11月07日 09:50:11服务端30

会话控制:就是为了我们在访问页面和页面之间的跳转是,能够识别到你的登录状态,已经你的登录时长等

在php的会话控制当中,涉及到两个概念Cookie和Session

Cookie 会话控制

  原理:在登录时候,会将你的用户名密码等信息保存在cookie中(cookie在客户端[浏览器]中存在,不安全),当每次登录首页时,都会先判断cookie中是否有对应的cookie信息保存,如果有,则直接判断登录,不需要重新输入用户名和密码,同样的,在页面跳转是,也通过cookie判断,访问页面的是否是同一个用户

  setcookie()

  setrawcookie()

参数一:$name cookie 的名字
参数二:$value cookie的值
参数三:$expire 设置cookie的过期时间,默认为0 单位是秒
参数四:$path 设置cookie的有效路径,默认是当前目录下有效,也可以指定目录
参数五:$domain 设置的cookie的作用域 默认在本地作用域localhost下
参数六:$secure 设置是否cookie只能通过https传输,默认值为false
参数七:$httponly 是否只能使用http访问cooki,默认为false,如果开启,可以减少xss攻击

 在php文件中输入  setcookie('nv','jx',time()+3600,'/');即可插入一条cookie数据,并且在浏览器F12打开控制台后查看得到

PHP-会话控制Cookie和Session _ JavaClub全栈架构师技术笔记

 那么,每个页面都会在我们的浏览器当中留下cookie信息,网页当中如何去识别这些cookie信息,并精准定位呢

就是在第五个参数 Domain中,设定cookie的作用域,只有在对应作用域下访问,才能显示该作用域网页所留下的所有cookie信息,如果将$path定位到对应的某个文件里面,那么久更加的精准了

PHP-会话控制Cookie和Session _ JavaClub全栈架构师技术笔记

 

 

那么对于cookie的更新,删除就更简单了,

 共同点:必须保持 保持$name  $path 和$domain 一致

  不同点:

  更新,更改值 $value

  删除:修改过期时间

同时:我们也可以通过header头信息来传输cookie信息

   格式:heaedr("Set-Cookie:name=value[;expires=date][;path=path][;domain=domain][;secure=secure][;httponly=httponly]")

     header('Set-Cookie:obj=hahah;expire='.gmdate('Y M D H:i:s',time()).';path=/;httponly=true');

 

Session的会话控制

  原理:当客户端访问服务器时,服务器根据需求设置session,将会话信息保存在服务器上,同时将标示session的session_id传递给客户端浏览器,
浏览器将这个session_id保存在内存中(cookie,url地址传递等),浏览器每次请求都会拿着存储在cookie或通过url地址将本地的session的id去匹配服务器上面的那个session_id,就能取得客户端的数据状态。

 如果客户端浏览器意外关闭,服务器保存的session数据不是立即释放,此时数据还会存在,但是我们设置在浏览器的的session_id的时间都是会话时间,当浏览器已关闭,就会消失,所以,我们需要通过cookie来讲session设置的session_id保存更久的时间

session所涉及的函数

  session_start();//每个页面使用session时都必须打开,不推荐在配置文件中一直打开,浪费资源

  $_SESSION['键'] = ‘值’;//设置session的内容,可以为用户名,密码,或其他基本信息等

  session_id() //获取我们的设置session是所随机配置给你的id值

  session_name() //获取我们存储是的名字,配置中默认为PHPSESSID,可以到配置文件中修改

  SESSION_destroy()//进行对session的销毁

  .......(还有很多api,请查询php.net(▰˘◡˘▰))

 PHP-会话控制Cookie和Session _ JavaClub全栈架构师技术笔记

在上图中,我们发现,我们通过session来存储信息时,是会话时间,我们可以通过cookie来再保存一次,并设置时间的长度

 setcookie(session_name(),session_id(),time()+3600,'/');//将获取的session_name()的值,和session_id()的值作为cookie的名称和值,重新插入cookie中即可

PHP-会话控制Cookie和Session _ JavaClub全栈架构师技术笔记

 

 当然,以上的session会话控制,也是要依赖于cookie来保存

禁用Cookie时

但如果当我们的客户端禁用掉cookie之后,如何处理呢?

既然问出来,当然是可以的

就是通过我们的地址栏url来传输我们的内容

我们知道,我们将信息保存到客户端之后,我们在后台只需要去控制两个值

  1.session_name(); 2.session_id();

只要控制着两个值,就能随时获取到我session中设置的值

首先:通过地址栏写入我们的session_name(); 和session_id();

  echo "<a href='1.php?'".session_name().'='.session_id()."‘>查看信息</a>";

第二步:当1.php获取到我的session_name()和session_id()时,我们就进行赋值和

    session_id($_GET[session_name()]);

    session_start();

    获取$_SESSION

 PHP-会话控制Cookie和Session _ JavaClub全栈架构师技术笔记

最后一步:销毁我们的session

  主要步骤是:1.清空$_SESSION   //$_SESSION = []  等于一个空数组

        2.清空cookie的数据 //同样的将cookie的过期时间调到当前时间的前面

        3.session_destroy()//销毁session会话

总结:

  无论是cookie还是session都能进行会话控制

    cookie保存在客户端中,安全性不高,当然我们可以通过加密和字符串连接等方式进行加强安全性,

    session 保存在服务器中,但同时也依赖于cookie,虽然可以通过其他方式访问,但推荐使用cookie方式,安全性比较强

 

作者:it蛋散
来源链接:https://www.cnblogs.com/itdansan/p/8583936.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/68266.html

标签: CookieSession
分享给朋友:

“PHP-会话控制Cookie和Session” 的相关文章

JUnit测试,异常BeanCreationException: Error creating bean with name 'sessionFactory'。Unable to get the default Bean Validation factory

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'departmentServiceImpl': Injection of resource fields fa...

Error creating bean with name 'scopedTarget.oauth2ClientContext': Scope 'session' is not active for the current thread;

引用:https://stackoverflow.com/questions/50405838/error-creating-bean-with-name-scopedtarget-oauth2clientcontext-scope-session 我解决的方式就是使用他拉问题中...

【SpringBoot】18、SpringBoot中使用Session共享实现分布式部署

【SpringBoot】18、SpringBoot中使用Session共享实现分布式部署

前言:我们知道,在单体项目中,我们将用户信息存在 session 中,那么在该 session 过期之前,我们都可以从 session 中获取到用户信息,通过登录拦截,进行操作 但是分布式部署的时候,我们请求的服务器可能不是同一台服务器,那么我们就必须要...

启动项目报错:Error creating bean with name 'sqlSessionFactory' defined in class path resource [applicationContext.xml]:Invocation of init method failed

1.Error creating bean with name 'sqlSessionFactory' defined in class path resource [applicationContext.xml]:Invocation of init method failed...

你必须知道的session与cookie

你必须知道的session与cookie

Session本质 提到Session我们能联想到的就是用户登录功能,而本身我们使用Session的基础是通过url进行访问的,也就是使用http协议进行访问的,而http协议本身是无状态的,那么问题来了服务器端是怎么验证客户端身份的? 答:服务器端和客户端验证的联系就是s...

cookie、session、token之间的关系

cookie、session、token之间的关系

 Cookie机制 由于HTTP是一种无状态协议,服务器没有办法单单从网络连接上面知道访问者的身份,为了解决这个问题,就诞生了Cookie。Cookie实际上是一小段的文本信息。Cookies是由服务器产生的。接下来我们描述一下Cookie产生的过程。浏览器第一次...

Cookie、Session和Token认证

Cookie、Session和Token认证

目录 Cookie Session认证机制 Session的一些安全配置 Token认证机制 Token预防CSRF Session认证和Token认证的区别 前言:HTTP是一种无状态的协议,为了分辨链接是谁发起的,需...

APPlication,Session和Cookie的区别

APPlication,Session和Cookie的区别

Application 任意大小 整个应用程序的生命期 所有用户 服务器端 Session 小量,简单的数据 用户活动时间+一段延迟时间(一般为20分钟) 单个用户 服务器端 Cookie 小量,简单的数据 可以根据需要设定 单个用户 客户端...

session(登录注销)和cookie(记住用户名和密码)的实现

session和cookie同样都可以用来保存客户资料,但是,session是把资料保存在服务器端,而cookie是把资料以文件的方式保存在客户端         &...

java Cookie+Session实现自动登录

java Cookie+Session实现自动登录

       这是2016年的第一篇blog,首先在这里祝大家新年工作开心,平平安安,生活舒心,日子红红火火!        之前我们聊过PHP的自动登录,我们也非常详细的给大家分析了实现的原理...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。