将会话放在if和else语句中

时间:2014-04-04 14:06:09

标签: php html if-statement

我遇到了将会话存储到变量中的问题 继承人代码:

<?php

$t = $_GET['nm'];
if ($t=="1")
  {

    session_start();
        // store session data
    $_SESSION['nm']=1;
  }
else
  {
  ?>
  <script>
    if( /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent) ) {
    window.location = "http://www.gouda-info.nl/mobile";
    }
    </script>
  <?php
  }

$session = $_SESSION['nm'];
if ($session=="1")
  {

当我尝试使用该脚本时,它只是不起作用。我使用此脚本来重定向移动用户,但是如果他们选择使用桌面版本,则可以通过激活存储的会话来允许存储,如果用户通过在链接中放置任何内容或1来激活桌面版本,就像这样:

http://www.example.com/index.php?nm=1

希望有人提出一个明智的解决方案。 :)

编辑:

如果我尝试运行此代码,它就会失败,它会给我一个空白页。

2 个答案:

答案 0 :(得分:3)

会话必须在顶部开始,有时您会与== 1处理$t == "1"

试试这段代码:

// first line
session_start();

$t = $_GET['nm'];
if ($t == 1) { // use 1 instead of "1"
    // store session data
    $_SESSION['nm'] = 1;
} else {
    ?>
    <script>
        if (/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent)) {
            window.location = "http://www.gouda-info.nl/mobile";
        }
    </script>
    <?php
}

$session = $_SESSION['nm'];
if ($session == 1) { // use 1 instead of "1"

}

答案 1 :(得分:1)

你在php中使用js代码,但你的js将在整个php文件执行后运行。所以请改用php;

<?php
session_start();
$t = $_GET['nm'];
if ($t == "1") {
    // store session data
    $_SESSION['nm'] = "1";
} else {
  if(isMobile()) {
    header('Location: http://www.gouda-info.nl/mobile');
    exit();
  }
}

$session = $_SESSION['nm'];
if ($session == "1") {
    ......
}

function isMobile($user_agent=NULL) {
    if(!isset($user_agent)) {
        $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
    }
    return (strpos($user_agent, 'Android') !== FALSE
            || strpos($user_agent, 'webOS') !== FALSE
            || strpos($user_agent, 'iPhone') !== FALSE
            || strpos($user_agent, 'iPad') !== FALSE
            || strpos($user_agent, 'iPod') !== FALSE
            || strpos($user_agent, 'BlackBerry') !== FALSE);
}