2015-02-19 5 views
6

В настоящее время я работаю над системой корзины покупок. Для входа в корзину требуется вход в систему пользователя. Поэтому я написал несколько кодов, чтобы отключить доступ к странице корзины, если пользователь не вошел в систему. Однако, когда я пытаюсь опорожнить корзину, я выхожу из системы. Я просто хочу уничтожить сеанс тележки, а не сеанс пользователя. Вот мой код:Как уничтожить определенную переменную сеанса в PHP?

Для страницы корзины:

<?php 
    session_start(); 
    if(isset($_SESSION['userID'])){ 

    } 
    elseif(!isset($_SESSION['userID'])){ 
     echo 
     "<script> 
     alert('You must be logged in.'); 
     window.location.href='index.php#login' 
     </script>"; 
    } 
?> 

    <?php 
    include ('../import/layout.php'); 
    ?> 

    <body> 

    <div class="site-wrapper" id="index"> 

     <div class="site-wrapper-inner"> 

     <div class="cover-container"> 

      <?php 
      include ('../import/nav-two.php'); 
      ?> 

      <!-- <div class="inner cover"> 

      </div> 

      <div class="mastfoot"> 
      <div class="inner"> 
       <p>&copy; 2015 Aroma Chicken House Restaurant, All Rights Reserved. 
       <a class="menu-item pull-right" href="#index">Back to Top</a> 
       </p> 
      </div> 
      </div> --> 

     </div> 

     <div id="cart"> 
      <div class="container"> 
      <?php 
       include ('../cart/index.php'); 
      ?> 
      </div> 
     </div> 


     </div> 

    </div> 


    </body> 

Для обновления корзину:

<?php 
session_start(); 
include_once("config/config.php"); 

//empty cart by distroying current session 
if(isset($_GET["emptycart"]) && $_GET["emptycart"]==1) 
{ 
    $return_url = base64_decode($_GET["return_url"]); //return url 
    session_destroy(); 
    header('Location:'.$return_url); 
} 

//add item in shopping cart 
if(isset($_POST["type"]) && $_POST["type"]=='add') 
{ 
    $product_code = filter_var($_POST["product_code"], FILTER_SANITIZE_STRING); //product code 
    $product_qty = filter_var($_POST["product_qty"], FILTER_SANITIZE_NUMBER_INT); //product code 
    $return_url  = base64_decode($_POST["return_url"]); //return url 

    //MySqli query - get details of item from db using product code 
    $results = $mysqli->query("SELECT product_name,price FROM products WHERE product_code='$product_code' LIMIT 1"); 
    $obj = $results->fetch_object(); 

    if ($results) { //we have the product info 

     //prepare array for the session variable 
     $new_product = array(array('name'=>$obj->product_name, 'code'=>$product_code, 'qty'=>$product_qty, 'price'=>$obj->price)); 

     if(isset($_SESSION["products"])) //if we have the session 
     { 
      $found = false; //set found item to false 

      foreach ($_SESSION["products"] as $cart_itm) //loop through session array 
      { 
       if($cart_itm["code"] == $product_code){ //the item exist in array 

        $product[] = array('name'=>$cart_itm["name"], 'code'=>$cart_itm["code"], 'qty'=>$product_qty, 'price'=>$cart_itm["price"]); 
        $found = true; 
       }else{ 
        //item doesn't exist in the list, just retrive old info and prepare array for session var 
        $product[] = array('name'=>$cart_itm["name"], 'code'=>$cart_itm["code"], 'qty'=>$cart_itm["qty"], 'price'=>$cart_itm["price"]); 
       } 
      } 

      if($found == false) //we didn't find item in array 
      { 
       //add new user item in array 
       $_SESSION["products"] = array_merge($product, $new_product); 
      }else{ 
       //found user item in array list, and increased the quantity 
       $_SESSION["products"] = $product; 
      } 

     }else{ 
      //create a new session var if does not exist 
      $_SESSION["products"] = $new_product; 
     } 

    } 

    //redirect back to original page 
    header('Location:'.$return_url); 
} 

//remove item from shopping cart 
if(isset($_GET["removep"]) && isset($_GET["return_url"]) && isset($_SESSION["products"])) 
{ 
    $product_code = $_GET["removep"]; //get the product code to remove 
    $return_url  = base64_decode($_GET["return_url"]); //get return url 


    foreach ($_SESSION["products"] as $cart_itm) //loop through session array var 
    { 
     if($cart_itm["code"]!=$product_code){ //item does,t exist in the list 
      $product[] = array('name'=>$cart_itm["name"], 'code'=>$cart_itm["code"], 'qty'=>$cart_itm["qty"], 'price'=>$cart_itm["price"]); 
     } 

     //create a new product list for cart 
     $_SESSION["products"] = $product; 
    } 

    //redirect back to original page 
    header('Location:'.$return_url); 
} 
?> 
+0

Try session_destroy() http://php.net/manual/en/function.session-destroy.php – M3ghana

+0

@Clouds OP хочет уничтожить только переменную корзины, а не всю сессию –

ответ

19

насчет

unset($_SESSION["products"]) 

вместо

session_destroy() 

Существует только один сеанс для каждого пользователя. Таким образом, нет возможности уничтожить «конкретную» сессию. Что вы можете сделать, так это удалить содержимое сеанса, отвечающее за отображение корзины (как показано выше).

+0

Человек. Благодаря! Не могу поверить, что все было так просто. Я пытался понять это в течение некоторого времени. Спасибо, что спасли меня некоторое время. –

0

Использование unset() для всех переменных сеанса, характерных для любой сайт 1 или 2.

unset($_SESSION['var1']); 
//or 
unset($_SESSION['var2']); 
1

вы можете использовать

unset($_SESSION["products"]); 
1

Использование,

unset($_SESSION["products"]); 

session_destroy() уничтожит все сессий, в то время как указанная выше строка уничтожит определенную переменную сеанса.

1

Что вы хотите - это не уничтожать сеанс, так как вы хотите, чтобы пользователь вошел в систему. Лучший способ сделать это - удалить или переписать переменные вашей корзины по мере необходимости. Вы можете либо unset($_SESSION['products']); полностью удалить эту переменную, либо $_SESSION['products'] = array(); вернуть ее в пустую корзину.

В какой-то момент (если вы сохраните телегу в базе данных позже), вы можете использовать один и тот же код, что и при удалении элемента из корзины для всех элементов, присутствующих в нем ...

0

unset() func полезен в этом случае.

session_destroy() FUNC уничтожит

0

session_destroy() является уничтожить все переменный сеанс и unset(session variable) уничтожить определенный переменный сеанс.

0

Значение определенного сеанса может быть установлено равным «null», а затем проверять значение этого сеанса с помощью функции empty(), где это необходимо или значение определенного сеанса может быть установлено на некоторое значение, пусть сказать 0, а затем проверить значение сеанса с установленным значением для выполнения некоторых операций.

Смежные вопросы