茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1675780 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
F09_330.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

PHP特區 : [分享]session 的使用必須有幾個要素

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[分享]session 的使用必須有幾個要素
session 的使用必須有幾個要素
(1) /etc/php.ini 的設定:
session.save_path = "/tmp"
session.auto_start = 0 (或1)

(2) 在 php 程式中:
如果 session.auto_start = 0 則必須先執行 session_start()
如果 session.auto_start = 1 就不必執行 session_start()

(3) 第一次使用 session 變數時, 先執行 session_register('變數名稱') 註冊變數
之後即可以使用 $_SESSION['變數名稱']
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[分享]沒有註冊session還是可以用?
看我的那本書上說使用session的時候要先session_start();
先開啟這個我認同,但是為什麼要先註冊才可以用那個 生session呢?
如:我要用
$_SESSION["name"] = "myname";

這樣不就可以直接使用了嗎?
但是為什麼要先用
session_register("name");

先註冊呢?
我實在不了解,而且我試過了沒有註冊也可以使用,這樣的話有必要註冊嗎?

session_register("name");

php3 以前的用法!!
$_SESSION["name"] = "myname";

php4 官方建議用法!!

兩個都是一樣的目的,但是撰寫以及應用的方式孑然不同!!

當使用註冊的方式時:
session_register("name");

$name <-- 就會被制定成只要在有session_start的情況下,
不管如何引用更變皆由session控管...

如果不是使用註冊的方式時:
$_SESSION["name"]

將不等於 $name ,也就變成兩個互不相關的變數!!

按照自己所需的情況去選擇要用哪種撰寫方式,當然我是以 $_SESSION 的方式在撰寫,
主要原因是我不管在哪一頁都是在session_start之下跑,在一些情況下同名的變數
取出時,就可以很容易的區分到底是SESSION中的資料還是本頁所產生的資料!!

PS:我記得這個和 register_globals On & Off 是有關係的吧!?
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[分享]session 無法使用 register 的功能
Warning: Unknown(): Your script possibly relies on a session side-effect which existed until PHP 4.2.3. 
Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled.
You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. 
in Unknown on line 0

在登入時出現的警告訊息
原程式碼
<?
$name=$_POST["name"];
$password=$_POST["password"];
session_register("user");
$user=$name;
?>

在本機是用apache 測試不會出現警告訊息
但到了學校的IIS 測試時卻出現警告訊息
請問該怎麼解決

那個指的是php.ini裡的設定
global_register的值為0(false,disable)
當global_register為false時
就不能使用
session_register("variable");

的方式來註冊一個session的變數,
而是要使用
session_start();
$_SESSION["variable"];

的方式來做....
你試看看唄...
這些資訊在php的manual裡都有說明唷...^^
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[分享]程式設計師需要注意的 PHP 5.4 變化
PHP 5.4.0 在美國時間2012年3月1號釋出,到現在已經發展到 5.4.3,之前寫過一篇 PHP 5.4.0 released!! 新功能,這次我們來探討看看 PHP 5.4.x 對於程式設計師在轉換平台或者是開發新功能所需要注意的地方。

Incompatible Changes

1. Safe mode 不再被支援,如果專案有任何牽扯到 Safe mode,請務必要調整 2.
Magic quotes 正式被移除,基本上目前開發 PHP 程式,務必將此設定為 FALSE,這樣之後轉移機器比較不會有任何問題,由於此設定已被移除,所以 get_magic_quotes_gpc() and get_magic_quotes_runtime() 這兩函式都會直接 return FALSE; 3. php.ini 正式移除 register_globals and register_long_arrays 兩項設定,這就不必多說了,遇到 POST 或 GET 資料,請大家全部改用 $_POST$_GET4. 移除
Call-time pass by reference 功能 以前可以 Call-time pass by reference 傳位址到 function 參數
function foo($var)
{
$var++;
}
$a=5;
foo(&$a);
// $a is 6 here
?>
5.4.X 請改寫成底下方式
function foo(&$var)
{
$var++;
}
$a=5;
foo($a);
?>
或是用 global 寫法
$a = 5;
function foo()
{
global $a;
$a++;
}
// $a is 6 here
?>
5.
break and continue 不再接受變數參數 (e.g., break 1 + foo() * $bar;),另外 break 0; 跟 continue 0; 也不能使用,只能直接使用 break 1; break 2; 等 之前如果這樣寫
$num = 2;
break $num;
在 5.4.x 請改寫成
break 2;
6. 在 date and time extension,timezone 不再使用 TZ environment variable,進而取代用 php.ini 裡的 date.timezone 或者是使用 php date_default_timezone_set() function,如果都沒有設定,PHP 將會吐出 E_WARNING 訊息 7. isset()empty() 變化 我想大家對這兩個函數並不陌生,isset 用來判斷變數 是否存在,empty 用來判斷變數 是否為空值,在 5.4 比較值得注意的地方是 isset on string 的用法。 PHP 5.3.x 以前
$expected_array_got_string = 'somestring';
var_dump(isset($expected_array_got_string['some_key']));
var_dump(isset($expected_array_got_string[0]));
var_dump(isset($expected_array_got_string['0']));
var_dump(isset($expected_array_got_string[0.5]));
var_dump(isset($expected_array_got_string['0.5']));
var_dump(isset($expected_array_got_string['0 Mostel']));
?>
大家會發現全部 return true;,可是到了 PHP 5.4.X 版本,除了 [0] 或 [‘0′] 會 return true 之外,其他都是 return false;。不過個人建議程式最好不要這樣寫,在判斷變數是否存在的時候,最好先透過
is_array()is_string() 判斷此變數是 array 或者是 string,反而上面的舉例是很少看到的。 8. 禁止 super globals 變數當作任何 function 參數,例如:
function ($_POST, $_GET) {
}
9. 移除
session_is_registered(), session_register() and session_unregister() function。 Session 的操作其實非常簡單,上面的 function 其實都是多餘的。 判斷 Session 是否存在:
if (isset($_SESSION['foo']))
{
echo 'session is exist';
}
註冊 Session
$_SESSION['foo'] = 'bar';
移除 Session
unset($_SESSION['foo']);
結論是操作 Session 就等同於操作 array 是一樣意思,所以才說那三個 function 早該移除了。

新功能 (New features)

可以先看之前寫的一篇 PHP 5.4.0 released!! 新功能 裡面提到 traits, array 新用法以及 web server in CLI mode,另外底下在整理幾點新功能: 1. short_open_tag 不需要設定就可以支援,也就是說底下程式會變成通用寫法 我們在 view 裡面都會這樣寫
或者是(先決條件是將 short_open_tag 設定為 on)
但是在 PHP 5.4.X 之後全部支援 short_open_tag 寫法。不過勸大家還是不要懶惰,用最原始的寫法還是最安全的。 2. 支援 Class member access on instantiation has been added 以前宣告 Class 都必須透過指定單一變數
$test = new foo();
$test->bar();
5.4.X 可以透過底下寫法
(new foo)->bar();
其實還有很多細節的部份,可以直接參考官網 Migrating from PHP 5.3.x to PHP 5.4.x,希望上面的例子,可以讓大家更瞭解 PHP 5.4.X。

原文出處: 程式設計師需要注意的 PHP 5.4 變化 | 小惡魔 - 電腦技術 - 工作筆記 - AppleBOY
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[分享]PHP 5.4 的 session 寫法變革

[PHP] PHP 5.4 的 session 寫法變革

前陣子把 PHP 升級到5.4後

發現有用到session的程式都爆了

Fatal error: Call to undefined function session_register()

google一下

原來是PHP 5.4的session寫法有改變

PHP 5.4 移除了  session_is_registered() 、  session_register() 與  session_unregister() 三支function。

Session 的操作更簡化了一些。

 


	//判斷 Session 是否存在
if( isset($_SESSION['foo']) )
echo 'session is exist';
//註冊 Session
$_SESSION['foo'] = 'bar';
//移除 Session
unset($_SESSION['foo']);

 

這樣操作其實更直覺,也不需要額外多記函式(個人很健忘),這三支函式早該移除了。

 

 

參考來源: http://blog.wu-boy.com/2012/06/what-has-changed-in-php-5-4-x/


原文出處:[PHP] PHP 5.4 的 session 寫法變革 @ Woo La Woo La Woo La La ~ :: 痞客邦 PIXNET ::
前一個主題 | 下一個主題 | 頁首 | | |



Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|