在之后的工作和学习中,更是发现了自己对于基础知识的不扎实,于是又返回头来学习,确实很多东西是之前没注意或是没掌握的。

着重讲一下这几个问题

--

什么是 Cookie ?

简单来说:

  因为 HTTP 无状态的,所以为了想在客户端保存一些数据来和服务端进行交互,我们需要在客户端存一部分数据,就是 Cookie 。

PHP 如何设置 Cookie 呢?

看一下 PHP 官方对于设置 Cookie 函数的定义

bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] )

介绍一下 setcookie() 这里面参数的含义

  $name  顾名思义,设置 Cookie 的名字。

  $value  设置这个 Cookie 的值。

  $expire   设置 Cookie 的过期时间,如果不设置或者为空,则表示在关闭浏览器时候销毁 Cookie。

        注意,这个时间是真正意义上的结束时间,应该是以你当前的时间+过期时间来完成的,单位为秒。

        例如:

          setcookie('name', 'hong.li', time() + 7*24*3600); // 当前时候后一周过期。

  $path   Cookie 有效的服务器路径。 默认值是设置 Cookie 时的当前目录。

         设置成 '/' 时,Cookie 对整个域名 domain 有效。        

       如果设置成 '/foo/', Cookie 仅仅对 domain 中 /foo/ 目录及其子目录有效(比如 /foo/bar/)。

  $domain 设置跨域。

  $secure    是否只接受 HTTPS 传来的 Cookie ,默认为 false;

  $httponly  是否只接受 HTTP 协议发来的Cookie,不允许 JS 来直接操作 Cookie ,可以有效防止 XXS 攻击,同时也可以在 php.ini 中设置。

--

除了 setcookie 这种方法,还有其他的方法可以设置 cookie 么?

当然是有的,先说一个 PHP 设置 Cookie 的其他一个函数

bool setrawcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )

它和 setcookie 的唯一区别就是 setcookie 会对值进行 urlencode 编码,而他不会。

第二种方式是直接发送一个 HTTP 头,指定 Set-cookie ,在浏览器中,会认为你是设置 cookie 的属性

header('Set-cookie: username=hong.li');

再看看你的浏览器们是不是有这个 Cookie 了。

--

如何删除我们已经设置好的 Cookie 呢?

浏览器手动删除,哈哈~

通过 PHP 直接把 Cookie 设置成已过期的时间,Cookie就会被删除。

 

--

已经有了 Cookie 可以设置信息了,我们还用 SESSION 干什么?

我们都知道 Cookie 是存在客户端的。是容易篡改的,再说也不能使用一个客户端的凭证来判断用户身份吧。

扯远了。。。。。。

总之,使用 Cookie 信息是远远不够的,SESSION 是服务端的一种存储状态。

--

SESSION 原理是什么?

在开始了 session 之后,在浏览器访问这个页面时候。

  1:服务端会检测 是否有 SESSION .

  2: 如果没有,则产生一个随机的 PHPSESSID, 并且自动发送发送一个 Cookie,这个 Cookie 在关闭浏览器后消失。

  3:如果有,则读取对应 SESSION 信息。

--

如何使用SESSION?

在 PHP 我们首先需要初始化 SESSION。

session_start();

之后可以在 $_SESSION 这个全局变量中增加或者我们的值

$_SESSION['username'] = 'hong.li';

之后我们就可以取到对应的值了。

需要注意的是,虽然我们使用的默认 Cookie ,保存了 SESSION_ID 的信息,但是这个信息会在关闭浏览器后消失,我们明显不想这样。于是我们会在这里使用 setcookie 来设置我们的信息。

setcookie('PHPSESSID', session_id(),time()+3600);

--

2018/04/21 PHP 中的Session和Cookie知识总结的更多相关文章

  1. MVC、控件、一般处理程序中的session and cookie

    Mvc中: session: if (!string .IsNullOrEmpty(find)) //设置 Session["oip"] = "无锡"; Vie ...

  2. JAVA中的Session和Cookie【转】

    一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于才服务器端保持状态的 ...

  3. Django中的session和cookie及分页设置

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  4. Django中的Session与Cookie

    1.相同与不同 Cookie和Session都是为了记录用户相关信息的方式, 最大的区别就是Cookie在客户端记录而Session在服务端记录内容. 2.Cookie和Session之间的联系的建立 ...

  5. javaWeb中的session和cookie

    Cookie Cookie 是浏览器提供的一种技术,通过服务器的程序能将一些只须保存在客户端,或者 在客户端进行处理的数据,放在本地的计算机上,不需要通过网络传输,因而提高网页处理的效率,并且能够减少 ...

  6. express中 使用session与cookie

    1.express如何使用session与cookie : https://www.jianshu.com/p/1839e482274e  或  https://www.cnblogs.com/chy ...

  7. ASP.NET MVC 中解决Session,Cookie等依赖的方式

    原文:https://blog.csdn.net/mzl87/article/details/90580869 本文将分别介绍在MVC中使用Filter和Model Binding两种方式来说明如何解 ...

  8. Django中的Session和cookie

    Session和cookie 参考文献:https://www.cnblogs.com/wupeiqi/articles/5246483.html 1.问题引入 1.1 cookie是什么? 保存在客 ...

  9. TP中的session和cookie

    session:1.session('name','value');  //设置session2.$value = session('name');  // 获取所有的session 3.2.2版本新 ...

随机推荐

  1. 【NodeJS】热更新

    1.npm install -g supervisor 2.supervisor WellDetect.js

  2. Create maintenance backup plan in SQL Server 2008 R2 using the wizard

    You will need to identify how you want your maintenance plan to be setup. In this example the mainte ...

  3. Myeclipse10使用git

    用Myeclipse安装egit,使用官网最新地址或者下载最新的egit插件到本地安装均在team中看不到git,最后发现到http://download.eclipse.org/egit/updat ...

  4. <转>github入门到上传本地项目

    转自 http://www.cnblogs.com/specter45/p/github.html GitHub是基于git实现的代码托管.git是目前最好用的版本控制系统了,非常受欢迎,比之svn更 ...

  5. 国内首款 FPGA 云服务器,性能是通用 CPU 服务器 30 倍以上

    版权声明:本文由薛梁原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/628340001485134638 来源:腾云阁 ht ...

  6. bs-loading

    根据bootstrap的modal来显示loading动效. 核心内容: 1.图片转base64方法: // 图片压缩-start function run(input_file,get_data){ ...

  7. dpkg安装deb缺少依赖包的解决方法

    [先贴出解决方案(基于Ubuntu)]: 使用dpkg -i   *.deb 的时候出现依赖没有安装 使用apt-get -f -y install  解决依赖问题后再执行dpkg安装deb包 === ...

  8. nginx 启动重启脚本

    #! /bin/sh # Default-Start:     2 3 4 5 # Default-Stop:      0 1 6 # Short-Description: starts the n ...

  9. (转)关于如何学好游戏3D引擎编程的一些经验

    此篇文章献给那些为了游戏编程不怕困难的热血青年,它的神秘要我永远不间断的去挑战自我,超越自我,这样才能攀登到游戏技术的最高峰 ——阿哲VS自己 QQ79134054多希望大家一起交流与沟通 这篇文章是 ...

  10. Windows Server 2008 R2之二从介质安装 AD DS

    可以使用 Ntdsutil.exe 为在域中创建的其他域控制器创建安装介质.通过从介质安装,可以最大程度地减少网络上目录数据的复制.有利于在远程站点中更高效地安装其他域控制器. 实验环境: 在Wind ...