1. php5,cookie中不能存數組嗎
cookie不像session那麼靈活,session幾乎可存儲任何的數據格式,包括數組
cookie只能存儲單個的參數,像單純存用戶名,存密碼,但用戶名和密碼要是放一個數組裡面存儲,是存不了的
2. php5實現網頁間數據傳遞,可以使用哪些方法
get,post,ajax.這三種是最常見的。當然還可以用cookie和session。
3. Php5使用哪種身份驗證技術和變數傳遞技術最好 - PHP進階討論
默認的Session
ID是存儲在Cookie中的,Session是以文件方式存儲在伺服器上的,當你讀取的時候才會讀到內存中,Cookie也是在讀取的時候才會放進內存相對來說Session的存儲是在服務端要比放在客戶端的Cookie方便一些,但是沒有Cookie的靈活,例如Javascript等客戶端腳本就無法讀取Session
4. php設置cookie的問題
你問這樣的問題說明你不懂cookie。cookie是保存在客戶端的,一般情況下只要是同一域名都可以訪問,而不是以文件夾來分。就算是同一文件夾,當你設置好,並用不同的域名訪問時也是不行的,比如你用127.0.0.1和localhost訪問同一文件夾,cookie肯定不一樣。瀏覽器請求時會將請求的該域名下的所有cookie發送給伺服器。php有專門讀取和設置cookie的函數,同一域名下隨便讀。
5. php 設置cookie並傳遞其它變數
得不到var的值嗎???
把cookie的值通過表單提交過來啊,可能沒有理解你的意思。。。
那在得到要設置cookie變數的時候就設置cookie,或者session,並設置過期時間,這樣你每個頁面都可以用了。。。
我是php5,可是一直用$_POST['var']啊
你只要做一下處理,這樣是可以的啊。。。
6. PHP5里禁用cookie後SESSION還能用嗎權威的來,詳細點謝謝!
可以的,cookie被禁止了之後,可以通過url傳遞cookie那個數來進行傳遞。只是這樣做比較麻煩一些,而且安全性不好,需要在需要限制的頁面的url中都加上sessionid,而且如果其他人獲取到這個sessionid的話,在有效期內,別的電腦也可以登錄。
這種url傳遞sessionid的方法,開發中很少有人用到,伺服器端在get到這個sessionid之後,在session_start之前,設置一下session_id(get到的id);這樣就可以和用戶進行關聯,效果和cookie存sessionid一樣。
7. ThinkPHP5設置Cookie有何講究
Cookie::set()
在設置cookie 的時候它的值是經過序列化+base64_encode加密後存儲的
cookie()則是直接寫入cookie的
在做Thinkphp和UC同步的時候,剛開始應用登陸同步UC是很正常的,但是反過來的時候卻出現了uc.php不能寫入cookie的情況。後來發現原來是作用域在作怪。
setcookie('uid', base64_encode(serialize($uid)), time() + 3600, '/');
base64_encode(serialize($uid))這么寫的原因是我網站獲取cookie的時候用的是Cookie::get("uid");!
8. 如何使用PHP操作cookie
PHP setcookie() 函數向客戶端發送一個 HTTP cookie。cookie 是由伺服器發送到瀏覽器的變數。cookie 通常是伺服器嵌入到用戶計算機中的小文本文件。每當計算機通過瀏覽器請求一個頁面,就會發送這個 cookie。cookie 的名稱指定為相同名稱的變數。例如,如果被發送的 cookie 名為 "name",會自動創建名為 $user 的變數,包含 cookie 的值。
必須在任何其他輸出發送前對 cookie 進行賦值。如果成功,則該函數返回 true,否則返回 false。
setcookie(name, value, expire, path, domain, secure)
name 必需。規定 cookie 的名稱。
value 必需。規定 cookie 的值。
expire 可選。規定 cookie 的有效期。
path 可選。規定 cookie 的伺服器路徑。
domain 可選。規定 cookie 的域名。
secure 可選。規定是否通過安全的 HTTPS 連接來傳輸 cookie。
可以通過 $HTTP_COOKIE_VARS["user"] 或 $_COOKIE["user"] 來訪問名為 "user" 的 cookie 的值。在發送 cookie 時,cookie 的值會自動進行 URL 編碼。接收時會進行 URL 解碼。如果不需要這樣,可以使用 setrawcookie() 代替。
程序1:
設置並發送 cookie:
1 <?php
2 $value = "my cookie value";
3 // 發送一個簡單的 cookie
4 setcookie("TestCookie",$value);
5 ?>
01 <html>
02 <body>
03 ...
04 ...
05 <?php
06 $value = "my cookie value";
07 // 發送一個 24 小時候過期的 cookie
08 setcookie("TestCookie",$value, time()+3600*24);
09 ?>
10 <html>
11 <body>
程序2:
檢索 cookie 值的不同方法:
01 <html>
02 <body>
03 <?php
04 // 輸出個別的 cookie
05 echo $_COOKIE["TestCookie"];
06 echo "<br />";
07 echo $HTTP_COOKIE_VARS["TestCookie"];
08 echo "<br />";
09 // 輸出所有 cookie
10 print_r($_COOKIE);
11 ?>
12 </body>
13 </html>
程序輸出:
1 my cookie value
2 my cookie value
3 Array ([TestCookie] => my cookie value)
程序3:
通過把失效日期設置為過去的日期/時間,刪除一個 cookie:
1 <?php
2 // 把失效日期設置為一小時前
3 setcookie ("TestCookie", "", time() - 3600);
4 ?>
程序4:
創建一個數組 cookie:
01 <?php
02 setcookie("cookie[three]","cookiethree");
03 setcookie("cookie[two]","cookietwo");
04 setcookie("cookie[one]","cookieone");
05 // 輸出 cookie (在重載頁面後)
06 if (isset($_COOKIE["cookie"]))
07 {
08 foreach ($_COOKIE["cookie"] as $name => $value)
09 {
10 echo "$name : $value <br />";
11 }
12 }
13 ?>
程序輸出:
1 three : cookiethree
2 two : cookietwo
3 one : cookieone
程序5:
view sourceprint?
1 /**
2 * 01.cookie設置
3 * */
4 function ssetcookie($var, $value, $life=0) {
5 global $_SGLOBAL, $_SC, $_SERVER;
6 setcookie($_SC['cookiepre'].$var, $value, $life?($_SGLOBAL['timestamp']+$life):0, $_SC['cookiepath'],$_SC['cookiedomain'], $_SERVER['SERVER_PORT']==443?1:0);
7 }
9. ThinkPHP5設置Cookie有何講究
Cookie::set()
在設置cookie 的時候它的值是經過序列化+base64_encode加密後存儲的
cookie()則是直接寫入cookie的
在做Thinkphp和UC同步的時候,剛開始應用登陸同步UC是很正常的,但是反過來的時候卻出現了uc.php不能寫入cookie的情況。後來發現原來是作用域在作怪。
setcookie('uid', base64_encode(serialize($uid)), time() + 3600, '/');
base64_encode(serialize($uid))這么寫的原因是我網站獲取cookie的時候用的是Cookie::get("uid");
10. php4的版本下cookie的設置與php5下的設置有什麼區別
PHP5 中的對象已經進行了較系統、較全面的調整,現在的樣子可能看起來會有些類似於 Java。本小節著重講述 PHP5 中新的對象模式,並舉了一些較簡易的例子來說明。就讓本節成為你的 PHP5 之旅的一個新起點吧。:)* 構造函數和析構函數
* 對象的引用
* 對象的克隆
* 對象中的私有、公共及受保護模式
* 介面 (Interfaces)
* 抽象類
* __call
* __set 和 __get
* 靜態成員
構造函數和析構函數在 PHP4 中,當函數與對象同名時,這個函數將成為該對象的構造函數,並且在 PHP4 中沒有析構函數的概念。
在 PHP5 中,構造函數被統一命名為 __construct,並且引入了析構函數的概念,被統一命名為 __destruct。例一:構造函數和析構函數class foo {
var $x;
function __construct($x) {
$this->x = $x;
}
function display() {
print($this->x);
}
function __destruct() {
print("bye bye");
}
}
$o1 = new foo(4);
$o1->display();
?>
在上面的例子中,當你終止調用 foo 類的時候,其析構函數將會被調用,上例中會輸出 「bye bye」。
對象的引用眾所周知,在PHP4 中,傳遞變數給一個函數或方法,實際是把這個變數做了一次復制,也就意味著你傳給函數或方法的是這個變數的一個副本,除非你使用了引用符號 「&」 來聲明是要做一個引用,而不是一個 Copy。在 PHP5 中,對象總是以引用的形式存在的,對象中的賦值操作同樣也都是一個引用操作。例二:對象的引用
class foo {
var $x;
function setX($x) {
$this->x = $x;
}
function getX() {
return $this->x;
}
}
$o1 = new foo;
$o1->setX(4);
$o2 = $o1;
$o1->setX(5);
if($o1->getX() == $o2->getX()) print("Oh my god!");
?>對象的克隆如上所述,當一個對象始終以引用的形式來被調用時,如果我想得到該對象的一個副本,該怎麼辦呢?PHP5 提供了一個新的功能,就是對象的克隆,語法為 __clone。例三:對象的克隆
class foo {
var $x;
function setX($x) {
$this->x = $x;
}
function getX() {
return $this->x;
}
}
$o1 = new foo;
$o1->setX(4);
$o2 = $o1->__clone();
$o1->setX(5); if($o1->getX() != $o2->getX()) print("Copies are independant");
?>
對象克隆的方法在其它很多應用程序語言中都是存在的,所以你不必擔心它的穩定性。:)
對象中的私有、公共及保護模式PHP4 中,一個對象的所有方法和變數都是公共的,這意味著你可以在一個對象的外部操作其中的任意一個變數和方法。PHP5 引入了三種新的用來控制這種存取許可權的模式,它們是:公共的(Public)、受保護的(Protected)及私有的(Private)。公共模式(Public):允許在對象外部進行操作控制。
私有模式(Private):只允許本對象內的方法對其進行操作控制。
受保護模式(Protected):允許本對象及其父對象對其進行操作控制。例四: 對象中的私有、公共及受保護模式class foo {
private $x;
public function public_foo() {
print("I'm public");
}
protected function protected_foo() {
$this->private_foo(); //Ok because we are in the same class we can call private methods
print("I'm protected");
}
private function private_foo() {
$this->x = 3;
print("I'm private");
}
}
class foo2 extends foo {
public function display() {
$this->protected_foo();
$this->public_foo();
// $this->private_foo(); // Invalid! the function is private in the base class
}
} $x = new foo();
$x->public_foo();
//$x->protected_foo(); //Invalid cannot call protected methods outside the class and derived classes
//$x->private_foo(); //Invalid private methods can only be used inside the class $x2 = new foo2();
$x2->display();
?>
提示:對象中的變數總是以私有形式存在的,直接操作一個對象中的變數不是一個好的面向對象編程的習慣,更好的辦法是把你想要的變數交給一個對象的方法去處理。
介面 (Interfaces)眾所周知,PHP4 中的對象支持繼承,要使一個對象成為另一個對象的派生類,你需要使用類似 「class foo extends parent」 的代碼來控制。 PHP4 和 PHP5 中,一個對象都僅能繼承一次,多重繼承是不被支持的。不過,在 PHP5 中產生了一個新的名詞:介面,介面是一個沒有具體處理代碼的特殊對象,它僅僅定義了一些方法的名稱及參數,此後的對象就可以方便的使用 'implement' 關鍵字把需要的介面整合起來,然後再加入具體的執行代碼。例五:介面interface displayable {
function display();
}
interface printable {
function doprint();
}class foo implements displayable,printable {
function display() {
// code
} function doprint() {
// code
}
}
?>
這 對提高代碼的可讀性及通俗性有很大的幫助,通過上面的例子可以看到,對象 foo 包含了 displayable 和 printable 兩個介面,這時我們就可以清楚的知道,對象 foo 一定會有一個 display() 方法和一個 print() 方法,只需要去了解介面部分,你就可以輕易的操作該對象而不必去關心對象的內部是如何運作的。抽象類抽象類不能被實例化。
抽象類與其它類一樣,允許定義變數及方法。
抽象類同樣可以定義一個抽象的方法,抽象類的方法不會被執行,不過將有可能會在其派生類中執行。例六:抽象類abstract class foo {
protected $x;
abstract function display();
function setX($x) {
$this->x = $x;
}
}
class foo2 extends foo {
function display() {
// Code
}
}
?>__callPHP5 的對象新增了一個專用方法 __call(),這個方法用來監視一個對象中的其它方法。如果你試著調用一個對象中不存在的方法,__call 方法將會被自動調用。例七:__callclass foo {
function __call($name,$arguments) {
print("Did you call me? I'm $name!");
}
} $x = new foo();
$x->doStuff();
$x->fancy_stuff();
?>
這個特殊的方法可以被用來實現「過載(overloading)」的動作,這樣你就可以檢查你的參數並且通過調用一個私有的方法來傳遞參數。例八:使用 __call 實現「過載」動作class Magic {
function __call($name,$arguments) {
if($name=='foo') {
if(is_int($arguments[0])) $this->foo_for_int($arguments[0]);
if(is_string($arguments[0])) $this->foo_for_string($arguments[0]);
}
} private function foo_for_int($x) {
print("oh an int!");
} private function foo_for_string($x) {
print("oh a string!");
}
} $x = new Magic();
$x->foo(3);
$x->foo("3");
?>__set 和 __get這是一個很棒的方法,__set 和 __get 方法可以用來捕獲一個對象中不存在的變數和方法。例九: __set 和 __getclass foo {
function __set($name,$val) {
print("Hello, you tried to put $val in $name");
}
function __get($name) {
print("Hey you asked for $name");
}
}
$x = new foo();
$x->bar = 3;
print($x->winky_winky);
?>類型指示在 PHP5 中,你可以在對象的方法中指明其參數必須為另一個對象的實例。例十:類型指示class foo {
// code ...
}
class bar {
public function process_a_foo(foo $foo) {
// Some code
}
}
$b = new bar();
$f = new foo();
$b->process_a_foo($f);
?>
可以看出,我們可以顯性的在參數前指明一個對象的名稱,PHP5 會識別出這個參數將會要是一個對象實例。