2013-03-25 129 views
-1

我正在通過jQuery $.post函數調用一個使用外部php腳本(do.php,say)的php(index.php,say)編寫一個頁面。無法通過jQuery從外部php腳本訪問php cookie

我傳遞一個名爲doit的post變量,它決定腳本將執行的操作。例如,如果doit爲1,它將爲用戶分配一個唯一的ID並將其存儲在一個名爲uid的cookie中,並使用setcookie()函數。如果doit爲2,則它將另一個稱爲msg的發佈數據輸入到表中,它通過名稱t + uid創建。例如。如果uid是14,它將創建一個名爲t14的表並將msg放入其中。

我用下面的代碼行設置cookie:

setcookie("uid", $val, time()+3600, '/'); 

而此行的代碼來創建表:

$q = "create table t".$_COOKIE["uid"]." (sl int primary key auto_increment, msg varchar(1000), seen int);"; 
mysql_query($q); 

現在我的問題是這樣的: SQL查詢正確執行,但我沒有從cookie變量中獲得任何價值。創建的表格簡單地命名爲t。

我的問題是: 我在做什麼錯?我應該怎麼做才能正確地獲得一個值?

P.S:當我檢查我的頁面設置的cookie時,我在那裏看到cookie。我嘗試清除cookie並再次嘗試,但每次cookie都設置正確,但不是表格。

還有另一個問題。 sql查詢只有在我刷新頁面後纔會執行。例如,我有另一個名爲uu的表,其中存儲當前用戶的uid和其他信息。該表中的最後一行包含前面的uid,而不是現在的那個。如果uid這次是10,並且我刷新頁面並將uid設置爲11,那麼uid = 10的信息會在表uu中更新。

任何幫助都非常感謝:-)謝謝。

+2

您正在使用[an **過時的**數據庫API](http://stackoverflow.com/q/12859942/19068)並應使用[現代替代](http://php.net/manual/en/mysqlinfo.api.choosing.php)。你也**易受[SQL注入攻擊](http://bobby-tables.com/)**,現代的API會使[防禦]更容易(http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php)自己從。 – Quentin 2013-03-25 14:18:21

+2

這裏有很多問題,但爲什麼要爲每個用戶創建一個新表?更糟糕的是,這是從一個可操作性很大的cookie設置的。最好有一個帶有用戶標識,消息標識,消息文本,時間戳等字段的「消息」表。另外,您不能將POST存儲在cookie中嗎?一切取決於你的應用程序設計,但聽起來像需要一些更多的想法 – okyanet 2013-03-25 14:29:40

+0

我知道這些漏洞。重點不在於構建完善而安全的網站,而是要學習mySQL和PHP的基礎知識。我是這兩個人的小白菜。無論如何感謝信息;我會記住:-) @Quentin。 – rktcool 2013-03-26 16:58:51

回答

0

PHP的setcookie函數在響應頭中發送cookie。如果您的AJAX調用在您收到來自index.php的響應之前執行,那麼您可能無法在請求中獲取cookie。

您可以嘗試將$ .post請求放在按鈕/鏈接點擊上,並檢查您是否在請求中獲取了cookie。如果可能,請提供完整的代碼(PHP和JavaScript)

+0

我在'$(document).ready()'中放置了發佈請求。那麼不應該確保AJAX調用在頁面準備好後(即在響應頭和東西之後)執行嗎? – rktcool 2013-03-26 17:05:07