Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 会话与临时会话。曲奇饼_Php_Session_Cookies - Fatal编程技术网

Php 会话与临时会话。曲奇饼

Php 会话与临时会话。曲奇饼,php,session,cookies,Php,Session,Cookies,我只是想知道。在PHP中,设置一个没有过期的cookie(意味着它在浏览器关闭时过期)和设置一个会话变量有什么区别。我不是说登录之类的东西;不需要在每次访问页面时获取不太频繁的更改数据库值,等等。会话和cookie之间有很多区别,因为这是两个不同的概念。它们的一些特征可以相互比较: 位置:存储在服务器上,客户端计算机上 传输:Cookie数据随每个请求通过网络传输-服务器上驻留的会话数据不会被传输 大小:Cookies的长度也有限。PHP会话可以接收更多的数据。会话比cookie更安全,因为它存

我只是想知道。在PHP中,设置一个没有过期的cookie(意味着它在浏览器关闭时过期)和设置一个会话变量有什么区别。我不是说登录之类的东西;不需要在每次访问页面时获取不太频繁的更改数据库值,等等。

会话和cookie之间有很多区别,因为这是两个不同的概念。它们的一些特征可以相互比较:

位置:存储在服务器上,客户端计算机上

传输:Cookie数据随每个请求通过网络传输-服务器上驻留的会话数据不会被传输


大小:Cookies的长度也有限。PHP会话可以接收更多的数据。

会话比cookie更安全,因为它存储在服务器上。
使用会话,很简单:)

会话不会像cookie那样容易受到影响,因为会话存储在服务器上,客户端只需要sessiond cookie


此外,Cookie的长度有限(感谢@Alfred)

非持久性Cookie应用于非敏感和非常轻量级的数据

服务器上每个会话存储的状态的会话变量

要实现的是,为了使会话状态正常工作,服务器将向浏览器发出会话cookie,浏览器将在每次后续请求时发送该cookie,这将使服务器能够检索用户会话的正确会话数据。这与HTTP的无状态性有着内在的联系,是web的基础之一


但是,请注意,如果您不使用HTTPS(使用SSL),这些会话cookie很容易被攻击者截获并重播,从而获得对您会话的访问权,即所谓的中间人攻击。

我忘了为这个会话示例做些什么,但确实在cookie示例中使用了它:(。在大多数浏览器(仅支持http_)中,当您使用它时,您的cookie无法从JavaScript中读取。要为您的会话使用仅支持http_的cookie:
ini_集(“session.cookie_httponly”,1);

在PHP中,设置cookie与不设置cookie有什么区别 过期(表示浏览器关闭时过期)并设置 会话变量

他们可以跟踪相同的信息,但使用cookie(不使用会话)所有信息都存储在user/webbrowser上,黑客可以窃取这些信息,甚至可以修改这些信息以提供虚假信息。对于简单的事情,你可以使用cookie,但我认为你也可以使用会话,因为当你使用cookie时,你需要通过网络传输更多的信息


internet()标准是一个(无内存)标准,它的优点是简化了服务器设计。internet用来使它“记住”

会话仅使用cookie存储在cookie内部。其余信息存储在哪个更安全的方式来保存状态(存储敏感信息)。您也可以这样做,但我认为这是很好的方法

您可以覆盖此行为,并且当您的网站流量较高时,可能应该使用类似/的方式将会话信息存储在内存中(内存读取文件的速度比旋转光盘快得多,因为内存也没有移动部件,并且非常接近CPU)。为此,您需要重写。使用redis非常容易。要安装redis,只需键入
make
。这是推荐的(流行的)PHP redis客户端库。要在redis中保存会话信息,您可以使用

一场 代码 我创建了一个非常简单的php文件来演示会话

<?php

session_start();

if (!isset($_SESSION['count'])) {
    $_SESSION['count'] = 0;
}

echo $_SESSION['count']++;
标准PHP使用文件系统存储属于会话(PHPSESSID)的数据。对我来说,这些文件位于
/var/lib/php5

alfred@alfred-laptop:~/www/stackoverflow/6717214$ php -r "echo session_save_path();"
/var/lib/php5
如您所见,它将该信息存储在文件sess_d5jfijp8515pbhnoe43v4rau97中。它在封面下用于将对象转换为字符串

alfred@alfred-laptop:/var/lib/php5$ sudo cat sess_d5jfijp8515pbhnoe43v4rau97
count|i:1;
我需要,因为我不能从那个位置阅读

alfred@alfred-laptop:/var/lib$ sudo ls -la /var/lib/ | grep php5
drwx-wx-wt  2 root          root           4096 2011-07-16 14:16 php5
尚未为该目录设置

使用保存的cookie进行第二次卷曲 曲奇饼 当仅仅使用cookie时,所有内容都存储在用户的计算机上

代码 正如您所看到的,所有内容都存储在cookie中,并通过网络发送

使用cookie第二次卷曲
alfred@alfred-笔记本电脑:~/www/stackoverflow/6717214$curl-b cookie-c cookie-vhtp://localhost/stackoverflow/6717214/cookie.php
*即将连接()到本地主机端口80(#0)
*正在尝试::1…连接被拒绝
*正在尝试127.0.0.1…已连接
*已连接到本地主机(127.0.0.1)端口80(#0)
>GET/stackoverflow/6717214/cookie.php HTTP/1.1
>用户代理:curl/7.21.0(i686 pc linux gnu)libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18
>主机:本地主机
>接受:*/*
>Cookie:计数器=0
> 
你是说在持久cookie中存储数据还是在会话中存储数据?我指的是临时cookie,就像浏览器关闭时删除一样:PConfused被问到,这就像问香蕉和松果有什么区别。哈哈,不完全是这样,两者可以暂时存储数据。我想知道ses的优点与cookie文件相反,因为如果没有cookie文件,我只会将cookie用于任何临时数据存储。但我得到了我想要的答案。我练习不传输敏感数据,就像
alfred@alfred-laptop:/var/lib/php5$ sudo cat sess_d5jfijp8515pbhnoe43v4rau97
count|i:1;
alfred@alfred-laptop:/var/lib$ sudo ls -la /var/lib/ | grep php5
drwx-wx-wt  2 root          root           4096 2011-07-16 14:16 php5
alfred@alfred-laptop:~/www/stackoverflow/6717214$ curl -v -b cookie http://localhost/stackoverflow/6717214/session.php
* About to connect() to localhost port 80 (#0)
*   Trying ::1... Connection refused
*   Trying 127.0.0.1... connected
* Connected to localhost (127.0.0.1) port 80 (#0)
> GET /stackoverflow/6717214/session.php HTTP/1.1
> User-Agent: curl/7.21.0 (i686-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18
> Host: localhost
> Accept: */*
> Cookie: PHPSESSID=d5jfijp8515pbhnoe43v4rau97
> 
< HTTP/1.1 200 OK
< Date: Sat, 16 Jul 2011 12:28:59 GMT
< Server: Apache/2.2.16 (Ubuntu)
< X-Powered-By: PHP/5.3.3-1ubuntu9.3
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
< Pragma: no-cache
< Vary: Accept-Encoding
< Content-Length: 1
< Content-Type: text/html
< 
* Connection #0 to host localhost left intact
* Closing connection #0
1
alfred@alfred-laptop:~/www/stackoverflow/6717214$ sudo cat /var/lib/php5/sess_d5jfijp8515pbhnoe43v4rau97
count|i:2;
<?php

$counter = 0;

if (isset($_COOKIE['counter'])) {
    $counter = $_COOKIE['counter'] + 1;
}

setCookie("counter", $counter, NULL, NULL, NULL, NULL, TRUE);
echo $counter;
alfred@alfred-laptop:~/www/stackoverflow/6717214$ curl -c cookie -v http://localhost/stackoverflow/6717214/cookie.php
* About to connect() to localhost port 80 (#0)
*   Trying ::1... Connection refused
*   Trying 127.0.0.1... connected
* Connected to localhost (127.0.0.1) port 80 (#0)
> GET /stackoverflow/6717214/cookie.php HTTP/1.1
> User-Agent: curl/7.21.0 (i686-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18
> Host: localhost
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Sat, 16 Jul 2011 13:22:03 GMT
< Server: Apache/2.2.16 (Ubuntu)
< X-Powered-By: PHP/5.3.3-1ubuntu9.3
* Added cookie counter="0" for domain localhost, path /stackoverflow/6717214/, expire 0
< Set-Cookie: counter=0; httponly
< Vary: Accept-Encoding
< Content-Length: 1
< Content-Type: text/html
< 
* Connection #0 to host localhost left intact
* Closing connection #0
0
alfred@alfred-laptop:~/www/stackoverflow/6717214$ cat cookie
# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

#HttpOnly_localhost FALSE   /stackoverflow/6717214/ FALSE   0   counter0
alfred@alfred-laptop:~/www/stackoverflow/6717214$ curl -b cookie -c cookie -v htp://localhost/stackoverflow/6717214/cookie.php
* About to connect() to localhost port 80 (#0)
*   Trying ::1... Connection refused
*   Trying 127.0.0.1... connected
* Connected to localhost (127.0.0.1) port 80 (#0)
> GET /stackoverflow/6717214/cookie.php HTTP/1.1
> User-Agent: curl/7.21.0 (i686-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18
> Host: localhost
> Accept: */*
> Cookie: counter=0
> 
< HTTP/1.1 200 OK
< Date: Sat, 16 Jul 2011 13:32:24 GMT
< Server: Apache/2.2.16 (Ubuntu)
< X-Powered-By: PHP/5.3.3-1ubuntu9.3
* Replaced cookie counter="1" for domain localhost, path /stackoverflow/6717214/, expire 0
< Set-Cookie: counter=1; httponly
< Vary: Accept-Encoding
< Content-Length: 1
< Content-Type: text/html
< 
* Connection #0 to host localhost left intact
* Closing connection #0
1