當session遇上header location儲存問題

May 30th, 2012

由於看到網上很多錯誤資訊, 所以自己寫下對session的行動, 研究在於function session_set_save_handler 所得出來的結論, 如有問題, 請指教

由session_start();開始, session只會做普通variable的動作

action.php

session_start();
$_SESSION[‘user’] = ‘abc’;
$_SESSION[‘user’] = ‘ddd’;

直到讀到file完結才會真正儲存session file

所以當action.php session有修改的時候, 最後加了

session_start();
$_SESSION[‘user’] = ‘abc’;
$_SESSION[‘user’] = ‘ddd’;
header(‘Location: index.php’);
exit();

就會即時跳到index.php, 這暫時不會儲存action.php的session, 也當沒有做過東西將他放了一個黑洞(無人不知的地方),直到index.php行完, 才會返回action.php儲存action.php的session
所以當index.php讀取$_SESSION[‘user’], 只會拿回沒有被修改的$_SESSION[‘user’]

PHP, Program , ,

PHP Filter User agent in session – Bot

February 2nd, 2012

由於php session 儲存在 database, 所以當有bot出現的時候, 我看到session 會儲存大量bot session, 所以要檢查user agent 是否bot. 那bot 就不會儲存session (database, file).

function isNotBot(){

$bots = array(
‘msn’ => ‘http://search.msn.com/msnbot.htm’,
‘yahoo’ => ‘http://help.yahoo.com/help/us/ysearch/slurp’,
‘WebAlta’ => ‘http://www.webalta.net/ru/about_webmaster.html’,
‘google’ => ‘http://www.google.com/bot.html’,
‘media_google’ => ‘mediapartners-google’,
‘soso’ => ‘http://help.soso.com/webspider.htm’
);

$agent = strtolower($_SERVER[‘HTTP_USER_AGENT’]);
foreach($bots as $name => $bot)
{
if(stripos($agent,$bot)!==false)
{
//echo $name;
return false;
}
}

//if( strpos( $_SERVER[‘HTTP_USER_AGENT’], “Googlebot” ) !== false )
//return false;
return true;
}

if(isNotBot())
session_start();

PHP, Program , , , ,