2011-06-28 39 views
0

我寫了我自己的長輪詢龍捲風/ AJAX聊天與房間,耳語消息和其他很酷的東西。直到現在作爲用戶身份驗證僅用於測試目的,我一直在使用cookie。所以你只需輸入你的名字,在創建cokie「用戶」之後,聊天會相應地對該cookie作出反應。但問題是,我爲一個有php站點的朋友寫了這個聊天。所以基本上我需要基於他的會話來驗證用戶。這就是我困惑的地方。 我很慚愧,因爲我陷入了一種想法,我不知道會話是如何工作的,這有點荒謬,因爲我不認爲自己是一個糟糕的程序員^^好吧,狗屎會發生。當然,我知道會話只在客戶端存儲id,而其他信息存儲在服務器上,但這並沒有什麼幫助,因爲我需要知道激動人心的細節。當然我google了一下,但仍然很困惑如何解決這個問題。所以基本的問題是:基於其他php網站的龍捲風用戶認證

1)希望如果有人能詳細解釋一次會議究竟如何工作,以及我需要知道或有權訪問php網站,以在另一個應用程序中使用會話。 ..

* 2) *因此,例如,當我在我的Django的網站進行身份驗證,會話與像「s5ds6dssd6」一些價值創造,並說實話我不知道是什麼,進一步用它做再次感慨。例如在PHP中提取用戶名(如果它被設置),並檢查/做一些事情,我會做一些像PHP_SESSION ['username'] === ...。在Django甚至更少的工作只是使用裝飾或user.is_authenticated方法。然而,如何在裏面工作,我需要什麼,我不知道。


有一個很大的機會,我寫的是愚蠢的,它很容易,我是一個白癡,其試圖以前寫......然而,即使不知何故,我將能夠得到會話的數據/ PHP網站我怎麼能確信,有些人沒有創建與自己的隨機id會話,沒有在php網站上驗證....

嗯,希望有人能指出我在正確的方向。有必要寫這麼多,所以你可以udnerstand =)什麼困擾我,並作出相應的反應....對不起,如果我寫了一些愚蠢的東西。

+0

我想我找到了我正在尋找的東西,唯一的方法就是在php目錄中找到會話文件並將其序列化。 http://stackoverflow.com/questions/2534525/accessing-php-session-from-python-wsgi-is-it-possible – Viktor

+0

另一個... http://www.python-forum.org/pythonforum/viewtopic .php?f = 19&t = 10855 – Viktor

回答

2

1)將不勝感激,如果有人可以 詳細解釋一次 會議究竟是如何工作的,什麼我 需要知道或有機會使用PHP 網站,在另一個 應用程序中使用會話.. 。

PS:我使用Linux(我用的是免費提供Ubuntu這是最流行/用戶友好的Linux distro)爲OS下面,我會建議你使用* NX發行(馬在我看來,cOSX也相當不錯,但價格昂貴)以及所有網絡開發,儘管所有這些命令也可在Cygwin(windows)中獲得。

Sessions是:在PHP

會議支持包括維護跨越 隨後的訪問某些數據的 方式。這使您可以 構建更多自定義應用程序 並提高您的網站 網站的吸引力。

下面我試圖解釋是什麼會議,他們是如何使用Cookie


我創建了一個簡單的no.php不使用會話,只是輸出Hello World

Hello World 

當我們curl這個腳本headers使用-v我們得到以下輸出:

[email protected]:~/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:

[email protected]:~/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_idhrduhht116e9mikhkkj0gu7126


如果我們不保存此cookie,當我們再次發出同樣的curl命令我們仍然收到西港島線作爲0答案(忘了算),還收到其他餅乾。

[email protected]:~/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標誌

[email protected]:~/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

[email protected]:~/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包含以下信息(顯示文件的輸出)

[email protected]:~/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來跟蹤伯爵。

[email protected]:~/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 ID相同1h6710hhk84e0k9bj2kg7p03u5和計數1而不是0,當我們不使用任何的cookie(或不保存Cookie,並獲得新的Cookie)。


所以基本上我需要根據自己的會話驗證 用戶。

會議只是簡單的使用Cookie(sessionid)的掩護下。例如,您可以覆蓋sessions to use the database的標準實現,而不是文件系統(有趣的閱讀!)。但我只是使用您在龍捲風應用程序中從PHP(session_id)收到的session_id來驗證您的會話,因爲它應該是唯一的(很難猜到)。

SESSION_ID()返回會話ID 當前會話或空 字符串(「」),如果沒有當前 會話(沒有當前的會話ID 存在)。


P.S:我希望這回答了你的問題一點點。如果不是的話,你可以在評論中多詢問一些信息?

+0

我是debian用戶我自己=)。 Thx的答案。很多你回答我所需要的一切。我是jsut不確定我能夠獲取id,如果我願意,那麼我應該訪問php網站數據庫,以便拉取用戶數據。真的,我可以使用ID的:D,但我想他們會更喜歡尼克斯。 Thx爲你的時間浪費在我愚蠢的問題上=) – Viktor

+0

你可以序列化你的$ _SESSION數據,並在兩臺服務器(帶有節點服務器的PHP服務器)進行通信時通過網絡發送。它會像echo'json_encode($ _ SESSION)一樣簡單;'保存會話信息? – Alfred