2012-01-16 9 views
0

私はモバイルサイトをユーザーにリダイレクトするdetectmobilebrowsers.comのモバイルスクリプトを持っていますが、URL「http://example.com/?mobile=no」が入力されると、ユーザーをリダイレクトしないセッションが作成されます私のサイトのすべてのページ...PHPセッションの問題

$mobile=$_GET['mobile']; 

if(isset($_SESSION['mobile'])){ 
    if($_SESSION['mobile']==="no"){ 
     complete(); 
    } 
    else{ 
     $_SESSION['mobile']="no"; 
     complete(); 
    } 
} 
elseif($mobile==="no"){ 
    $_SESSION['mobile']="no"; 
    complete(); 
} 
elseif($_SESSION['mobile']!="no"){ 
    checkMobile(); 
} 
function checkMobile(){ 
    // Mobile Detection Code taken out to save space. 
    gotoMobile(); 
} 
function gotoMobile(){ 
    echo "<script>window.location='http://m.MySite.org/';</script>"; 
} 
function complete(){ 
    return false; 
} 

申し訳ありませんが、私は短期間ではなく、混乱に見える場合:(設定されている)モバイル検出...セッションモバイル=なしユーザーがフルサイトを表示するために願いをした場合、いつ作りますそのセッションが作成されて永遠に(同じPHPスクリプト)でチェックされ、私は携帯電話のための私のセッションを設定する場合、私は永遠に滞在したい...私の場合は、起こる唯一の事は、最初のページはリダイレクトされませんが私はそれをunleを表示しない別のページに行くss私は?mobile = noを追加しますが、ここではセッションの全体が一点であるので、これは一度だけ行う必要があります。

答えて

1

あなたはPHPのセッションでユーザー情報を格納を開始する前に、最初のセッションを開始する必要があります:

session_start(); 

のsession_start前ouputtedにマークアップ()、いなくても空白があってはいけません!(出力バッファリングが使用されていない場合)。

http://php.net/manual/en/function.session-start.phpを参照してください。

+0

session_start()の前にコードがないことは間違いです。出力バッファリングが使用されていない限り、出力が生成される前にセッション開始を呼び出す必要があります。セッション変数を使用する前に、いつでもsession_start()を呼び出すことができます。PHPの出力バッファリングを有効にしないと出力が送信されないように注意してください。スクリプトは実行を終了します。 – shevron

+0

@ShaharEvron良い点は、 – paislee

1

これは簡単ですが、すべてのセッション変数を確認する前に、すべてのページの上部にあるsession_start()を使用していますか?

+0

こんにちは、ありがとうございました...私はsession_start()を追加します。 **警告:session_start()[function.session-start]:セッションキャッシュリミッタを送信できません - ヘッダーはすでに送信されています(出力は/ home /に開始されました) onlineagenda/onlineagenda.org/index.php:4)/home/onlineagenda/onlineagenda.org/oa/mobile/mobile.inc.php 3行目** –

+0

他のものの前にsession_start()を呼び出します。 – paislee