我写了我自己的长轮虫龙卷风/ AJAX聊天与房间,耳语消息和其他很酷的东西。现在作为用户身份验证仅用于测试目的,我一直在使用cookie。所以你必须输入你的名字,在创建了'cokie'用户'后,聊天会对该cookie作出相应的反应。但问题是我为一个拥有php网站的朋友写了这个聊天。所以基本上我需要根据他的会话来验证用户。这就是我感到困惑的地方。 我感到非常惭愧,因为我发现自己不知道会话是如何工作的,这有点荒谬,因为我不认为自己是一个如此糟糕的程序员^^好吧,狗屎发生了。那么我知道会话只在客户端存储id,其他信息存储在服务器上,但这并没有真正帮助,因为我需要知道详细情况。当然我google了一下,但仍然困惑如何解决这个问题。所以基本问题是:
1)如果有人可以详细解释会话的确切工作方式,以及我需要知道或有权访问php网站,在其他应用程序中使用会话,我将不胜感激...
* 2) *例如,当我在我的django网站上进行身份验证时,会创建一些像's5ds6dssd6'这样的值,并且说实话我不知道该怎么做用它。再次惭愧。例如在PHP中提取用户名(如果已设置)并检查/执行某些操作我将执行类似PHP_SESSION ['username'] === ...。在django中更少工作只是为了使用decorator或user.is_authenticated方法。然而,如何在里面工作,我需要什么,我不知道。
我写的很有可能是愚蠢的,这很容易,而且我是一个白痴,在尝试之前写的......但即使我以某种方式能从session / php网站获取数据怎么可能我确定有些人不会自己创建具有随机id的会话,而无需在php网站上进行身份验证....
希望有人能指出我正确的方向。我觉得有必要写这么多,所以你可以udnerstand =)什么困扰我并做出相应的反应....抱歉,如果我写了一些愚蠢的东西。
答案 0 :(得分:2)
1)如果有人可以,我会很感激 详细解释了一次 究竟会话如何工作,以及我是什么 需要知道或有权访问PHP 网站,在另一个网站上使用会话 申请......
PS:我正在使用Linux(我使用免费提供的Ubuntu,这是最受欢迎/用户友好的Linux distro),如下OS我会建议你使用* nx发行版(MacOSX也很不错,但我认为很贵)以及所有的web开发,尽管Cygwin(windows)中也提供了所有这些命令。
Sessions是:
PHP中的会话支持包括一个 保存某些数据的方法 后续访问。这使你 构建更多自定义应用程序 并增加您的网络的吸引力 站点。
下面我尝试解释哪些会话以及他们如何使用cookie
我创建了一个简单的no.php
,它不使用会话,只输出Hello World
:
Hello World
当我们curl此脚本并使用headers使用-v 时,我们会得到以下输出:
alfred@alfred-laptop:~/www/6500588$ curl http://localhost/6500588/no.php -v
* 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 /6500588/no.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: Tue, 28 Jun 2011 02:10:53 GMT
< Server: Apache/2.2.16 (Ubuntu)
< X-Powered-By: PHP/5.3.3-1ubuntu9.3
< Vary: Accept-Encoding
< Content-Length: 12
< Content-Type: text/html
<
Hello World
* Connection #0 to host localhost left intact
* Closing connection #0
从输出中可以看出,没有设置cookie。如果你反复这样做,你将获得相同的输出。
接下来,我创建了一个简单的yes.php
文件,它可以使用会话。
<?php
session_start();
if (!isset($_SESSION['count'])) {
$_SESSION['count'] = 0;
}
echo $_SESSION['count']++;
让我们在不存储cookie的情况下显示curl的输出:
alfred@alfred-laptop:~/www/6500588$ curl http://localhost/6500588/yes.php -v
* 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 /6500588/yes.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: Tue, 28 Jun 2011 02:12:47 GMT
< Server: Apache/2.2.16 (Ubuntu)
< X-Powered-By: PHP/5.3.3-1ubuntu9.3
< Set-Cookie: PHPSESSID=hrduhht116e9mikhkkj0gu7126; path=/
< 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
0
您可以看到计数为0
,但也设置了Cookie:Set-Cookie: PHPSESSID=hrduhht116e9mikhkkj0gu7126; path=/
。使用session_id hrduhht116e9mikhkkj0gu7126
如果我们再次发出相同的curl命令时不存储此cookie,我们仍然会收到0
作为答案(忘记计数)并且还会收到另一个cookie。
alfred@alfred-laptop:~/www/6500588$ curl http://localhost/6500588/yes.php -v
* 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 /6500588/yes.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: Tue, 28 Jun 2011 02:16:42 GMT
< Server: Apache/2.2.16 (Ubuntu)
< X-Powered-By: PHP/5.3.3-1ubuntu9.3
< Set-Cookie: PHPSESSID=ihlj9c9fifl8f0lklu0umesas2; path=/
< 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
0
正如您所看到的,hrduhht116e9mikhkkj0gu7126
不等于ihlj9c9fifl8f0lklu0umesas2
,这意味着已设置新的Cookie并且该会话中的信息将丢失。
接下来,我们将cookie存储到发出cookie
标志
-c
文件中
alfred@alfred-laptop:~/www/6500588$ curl http://localhost/6500588/yes.php -v -c cookie
* 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 /6500588/yes.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: Tue, 28 Jun 2011 02:27:11 GMT
< Server: Apache/2.2.16 (Ubuntu)
< X-Powered-By: PHP/5.3.3-1ubuntu9.3
* Added cookie PHPSESSID="1h6710hhk84e0k9bj2kg7p03u5" for domain localhost, path /, expire 0
< Set-Cookie: PHPSESSID=1h6710hhk84e0k9bj2kg7p03u5; path=/
< 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
0
从ls
(目录列表)中可以看到,我们将cookie存储到名为cookie
的文件中。
alfred@alfred-laptop:~/www/6500588$ ls -al
total 20
drwxr-xr-x 2 alfred alfred 4096 2011-06-28 04:27 .
drwxr-xr-x 19 alfred alfred 4096 2011-06-28 03:59 ..
-rw-r--r-- 1 alfred alfred 196 2011-06-28 04:27 cookie
-rw-r--r-- 1 alfred alfred 12 2011-06-28 04:00 no.php
-rw-r--r-- 1 alfred alfred 114 2011-06-28 04:12 yes.php
根据cat
(显示文件输出),跟踪计数的cookie包含以下信息
alfred@alfred-laptop:~/www/6500588$ 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.
localhost FALSE / FALSE 0 PHPSESSID 1h6710hhk84e0k9bj2kg7p03u5
我们接下来使用该cookie来跟踪计数。
alfred@alfred-laptop:~/www/6500588$ curl http://localhost/6500588/yes.php -v -b cookie
* 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 /6500588/yes.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=1h6710hhk84e0k9bj2kg7p03u5
>
< HTTP/1.1 200 OK
< Date: Tue, 28 Jun 2011 02:40:18 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
正如您所看到的那样,当我们不使用任何cookie(或不存储cookie和cookie)时,我们使用具有相同ID 1h6710hhk84e0k9bj2kg7p03u5
的cookie并且计数为1
而不是0
得到新的cookie)。
所以基本上我需要进行身份验证 用户根据他的会话。
会话很简单,使用封面下的cookie(sessionid)。例如,您可以覆盖sessions to use the database的标准实现而不是文件系统(有趣的读取!)。但我只会使用您在龙卷风应用程序中从PHP(session_id
)收到的session_id来验证您的会话,因为这应该是唯一的(难以猜测)。
session_id()返回会话ID 对于当前会话或空 如果没有电流,则为字符串(“”) 会话(没有当前会话ID 存在)。
P.S:我希望这会回答你的问题。如果没有,您可以在评论中询问更多信息吗?