Switch From Mobile Version to Full Website (Desktop Version)

25,406

When the user clicks the 'Full Site' link, you can pass a variable to PHP by appending it to the URL. Here's an example of what the HTML link would look like on the mobile site:

<a href="http://mywebsite.com/?v=desktop">Full Site</a>

In PHP, the variable you passed in will be stored in $_GET['v'] ('v' is for version, but the naming is arbitrary). In your PHP code, you will first need to check whether $_GET['v'] is even set at all. If it is set, then you need to check whether or not it is set to 'desktop'. If both are true, then you should set a session variable so that if the user refreshes the page they won't be redirected to the mobile site again.

Now you need to check the session variable to see whether or not you should redirect the user. Again, you will need to first check that $_SESSION['v'] is set at all. If it is not set, then you should redirect the user. If it is set, then you need to check whether or not it is set to 'desktop'. If it is not set to 'desktop', then you should redirect the user. Here's what the code would look like:

// Set a session variable if the user prefers the desktop version
if (isset($_GET['v']) && $_GET['v'] == 'desktop') {
    $_SESSION['v'] == 'desktop';
}

// Detect browser and redirect mobile users unless they've already opted out
if (!isset($_SESSION['v']) || (isset($_SESSION['v']) && $_SESSION['v'] != 'desktop')) {
    // Place browser detection and redirection code here
}

One of the nice things about PHP is that it will handle sessions for you, but you must explicitly tell PHP to do so. You do this by using the session_start() function at the top of each page that needs to be part of the session. In this case, you would need a session_start() statement at the top of both the desktop site's page as well as the mobile site's page.

Share:
25,406
PersianBoy67
Author by

PersianBoy67

Updated on December 02, 2020

Comments

  • PersianBoy67
    PersianBoy67 over 3 years

    I'm using this code to direct the users from desktop version to my mobile site.

     <?php
    $useragent=$_SERVER['HTTP_USER_AGENT'];
    if(preg_match('/android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($useragent,0,4)))
    header('Location: http://mywebsite.com/mobile');
    ?>
    

    i would like to give the users the option to switch back to desktop version from the mobile website but this code will redirect them back to mobile site. I was wondering if i can create an if statement to force the browser to stay on that page. for example if i can link back from mobile website using www.mywebsite.com?device=desktop and modify the code to recognize the url. my knowledge of PHP is limited so any help would be greatly appreciated.

    SOLUTION:

    ** I tried to use session function as it was suggested in comments but i had issue with mobile devices. it seemed that some mobile browsers doesn't handle session very well.

    ** I used cookie instead and with the help of this post was able to solve the issue. Below is the code i'm using.

    ** NOTE: you can modify the detection code and time for setcookie to suit your needs

        <?php
    
        if (isset($_COOKIE['nomobile'])) {
          $version = "desktop";
        } else {
    
        if (preg_match('/iPhone|(...etc...)/', $_SERVER['HTTP_USER_AGENT'])) {
           $version = "mobile";
        } 
    
    if ($version == "mobile") {
    header('Location: http://yourwebsite.com/mobile');
    }
    
        ?>
    

    And you can use this code to create the cookie

    <?php 
    setcookie('nomobile', 'true');
       header('Location: http://yourwebsite.com');
    ?>