1) Буду признателен, если кто-то может
подробнее объясните еще раз
как именно работают сессии, и что я
нужно знать или иметь доступ к на php
сайт, чтобы использовать сеансы в другом
приложение ...
PS: я использую Linux (я использую свободно доступную Ubuntu , которая является самым популярным / удобным для Linux дистрибутивом ) в качестве OS ниже, и я бы посоветовал вам использовать * nx дистрибутив (MacOSX также неплох, но, на мой взгляд, дорогой), а также все ваши веб-разработки, хотя все эти команды также доступны в Cygwin ( окна) .
Сессии :
Поддержка сессий в PHP состоит из
способ сохранить определенные данные через
последующие доступы. Это позволяет вам
создавать более индивидуальные приложения
и повысить привлекательность вашей сети
сайт.
Ниже я попытаюсь объяснить, что такое сеансы и как они используют куки
Я создал простой no.php
, который не использует сессии и просто выводит Hello World
:
Hello World
Когда мы curl этот сценарий с заголовками , используя -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']++;
Давайте покажем вывод из curl без сохранения 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: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=/
. с идентификатор_сессии hrduhht116e9mikhkkj0gu7126
Если мы не сохраним этот файл cookie, когда снова введем ту же команду curl, мы все равно получим 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
flag
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
Этот файл cookie для отслеживания количества содержит следующую информацию в соответствии с cat
(показывает вывод файла)
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 с тем же идентификатором 1h6710hhk84e0k9bj2kg7p03u5
, и его число составляет 1
вместо 0
, когда мы не используем файлы cookie (или не храним файлы cookie и не получаем новые файлы cookie).
Так что в основном мне нужно аутентифицироваться
пользователи на основе его сессий.
сессии просто использовать куки ( sessionid ) под обложкой. Например, вы можете переопределить стандартную реализацию для сеансов , чтобы использовать базу данных вместо файловой системы (интересно читать!). Но я бы просто использовал session_id , который вы получаете от PHP (session_id
) в вашем приложении торнадо, для аутентификации вашего сеанса, потому что он должен быть уникальным (трудно угадать).
session_id () возвращает идентификатор сеанса
для текущей сессии или пустой
строка (""), если тока нет
сеанс (без текущего идентификатора сеанса
существует).
П.С .: Надеюсь, это немного ответит на ваш вопрос. Если нет, то вы можете попросить в комментариях немного больше информации?