大概會有一些小小的表現,但除此之外呢?當頁面請求正在構建(在PHP中)時,多次運行session_start()會有什麼危害嗎?
回答
從the docs:
自PHP 4.3.3,呼籲先前啓動會話之後的session_start()會導致E_NOTICE級別的錯誤。另外,第二次會話開始將被忽略。
所以不,它不會造成傷害,但會引發錯誤。事實上,這可能表明您正在做錯某些事情,可能需要重新考慮您的代碼是如何佈局的。
從PHP 4.3.3開始,在會話已經啓動時調用session_start()會導致E_NOTICE警告。第二調用在session_start()將只是如果會話已啓動第一或ignored.You可以檢查不是:
if (session_id() == "")
session_start();
閱讀在session_start的文檔,所有我能看到的是:
自PHP 4.3.3,稱
session_start()
以前開始在會議結束後將會導致E_NOTICE
平的誤差。另外,第二次會話開始將被忽略。
所以,你會得到一個E_NOTICE
並被忽略。
如果會話已經打開,那麼它將返回錯誤通知,並且新會話將被忽略。所以沒有傷害,但你會有一個討厭的錯誤。
但是...如果您發現需要這樣做,那麼這可能是您的代碼組織不良的一個症狀。看看如何讓自己避免重複冗餘任務(如啓動會話)可能會對您有利。
我通常會將一個會話開始語句放在一個包含我require_once的文件中。但我認爲不應該有多個電話的問題。
調用session_start();會損害您的應用程序的性能。
下面的代碼將觸發E_NOTICE,但不會傷害聰明那麼多的性能
<?php
session_start();
session_start();
?>
但調用下面會損害性能! 但它仍然有用。如果你有一個需要3分鐘運行的腳本,並且用XHR(js)調用。 在這種情況下,使用session_write_close很有用。否則向服務器的請求被阻止,直到會話被釋放。可能發生的情況是,您希望在腳本的開頭和腳本的末尾使用會話。
<?php
session_start();
session_write_close();
session_start();
?>
但是,當你調用session_start();所有的信息都是反序列化的,當你調用session_write_closed()時,它會被序列化。 所以,如果你有很多數據,它可以真的很慢!
以下測試顯示它有多大的影響。
1.0130980014801 sesion_start +密切與空會話
1.0028710365295正常循環,而不會議上再次
12.808688879013與啓動+關閉會話大量數據
1.0081849098206正常循環(無用還挺)
<?php
//start and clear first session
session_start();
session_destroy();
session_write_close();
//test one
if(true) {
//test loop one
$start = microtime(true);
for($i = 0; $i < 1000; $i++) {
session_start();
usleep(100);
session_write_close();
}
$end = microtime(true);
echo($end - $start);
//test loop 2
echo('<br />');
$start = microtime(true);
for($i = 0; $i < 1000; $i++) {
usleep(100);
}
$end = microtime(true);
echo($end - $start);
}
//fill the array with information so serialization is needed
session_start();
$_SESSION['test'] = array();
for($i = 0; $i < 10000; $i++) {
$_SESSION['test'][$i] = chr($i);
}
session_write_close();
echo('<br />');
//test two
if(true) {
//test loop one
$start = microtime(true);
for($i = 0; $i < 1000; $i++) {
session_start();
usleep(100);
session_write_close();
}
$end = microtime(true);
echo($end - $start);
//test loop 2
echo('<br />');
$start = microtime(true);
for($i = 0; $i < 1000; $i++) {
usleep(100);
}
$end = microtime(true);
echo($end - $start);
}
?>
如果它產生錯誤,賠率是開發人員不打算執行該特定操作t o發生。所以是的,儘管你在W3School上看到了什麼,但在技術上這是一個'壞'的事情。
因此,不是玩它安全並嘗試設置每個頁面上的會話,爲什麼不第一檢查,看看會話存在之前,你前進?
if (!isset($_SESSION)) session_start();
就我個人而言,我會先檢查會話cookie的存在。
`總是使用這個在PHP中包含頁眉和頁腳文件。你開始在這兩個頁面的會話,但你使用這個然後session_start()
if(!isset($ _ SESSION)){session_start(); }`
- 1. 有很多枚舉值會有什麼危害嗎? (many> = 1000)
- 2. 「無效實體」有什麼危害嗎?
- 3. 在線程局部字典中放入django請求對象有什麼危害?
- 4. 在MySQL中爲varchar選擇一個大值會有什麼危害嗎?
- 5. 只在頁面上運行PHP回發請求一次?
- 6. 正在運行頁面加載多次
- 7. 第一次請求default.aspx頁面時會發生什麼?
- 8. 編譯boost時,定義BOOST_DISABLE_ABI_HEADERS會有什麼危害?
- 9. Java程序終止時無法關閉文件會有什麼危害嗎?
- 10. 爲什麼IIS 7.5會多次構建一個頁面
- 11. MIPS結構危害
- 12. 使用varchar(x)有什麼危害?
- 13. 當請求頁面時,有沒有辦法運行init的php代碼?
- 14. 沒有虛擬方法的虛擬析構函數有什麼危害嗎?
- 15. 當服務器發送的事件正在運行時,不會加載帶有session_start()的頁面
- 16. PHP會話,爲什麼session_start()需要多次?
- 17. 當請求同時運行時,Scrapy會覆蓋結果嗎?
- 18. 讓git分支「變老」有什麼危害嗎?
- 19. 當頁面沒有從瀏覽器請求頁面時,PHP的行爲不同
- 20. 每次請求時都會運行T4模板嗎?
- 21. PHP中的GET和POST請求在signle頁面什麼是happning
- 22. 在session_start或PHP請求不起作用
- 23. 在Python函數中使用kwarg = kwarg會有什麼危險嗎?
- 24. 爲什麼當有很多請求時應用程序會自行掛起?
- 25. PHP正在進行多捲曲請求
- 26. 'ab'程序在多次請求後會凍結,爲什麼?
- 27. 如果請求超時,HttpClient會多次執行請求
- 28. 爲什麼location.replace()在AJAX請求仍在運行時執行?
- 29. 請求正在運行時等待
- 30. 當ACL已經到位時,給予網站充分信任有什麼危害?