实现购物车

项目实践

结构图

此处输入图片的描述

环境

  1. 启动Apache2服务器
    service apache2 start
    
  2. 进入目录
    cd /var/www/html
    
  3. 新建php文件或者html,写代码
    <?php 
    .......
    ?>
    
  4. 浏览器打开访问php
  5. 常见问题
    //文件没有写入:一般就是linux下的权限问题
    sudo chmod -R 777 /var/www/
    

有三个页面

  1. MyHall.php --------购物大厅
  2. ShopProcess.php --------保存session
  3. ShowCart.php ----------展示

第一个页面

MyHall.php ----------购物大厅

<?php 
    //购物大厅
    echo "<h1>欢迎购买</h1>";
    echo "<a href='ShopProcess.php?bookid=s1&bookname=A'>A</a>";
    echo "<a href='ShopProcess.php?bookid=s2&bookname=B'>B</a>";
    echo "<a href='ShopProcess.php?bookid=s3&bookname=C'>C</a>";
    echo "<a href='ShopProcess.php?bookid=s4&bookname=D'>D</a>";
    echo "<hr/>";
    echo "<a href='ShowCart.php'>查看购买的商品列表</a>";
?>

第二个页面

ShopProcess.php-----------处理请求

<?php
//接受用户购买请求,并把书保存在session中
$bookid=$_GET['bookid'];
$bookname=$_GET['bookname'];
//保存到session中
session_start();
$_SESSION["$bookid"]=$bookname;
echo "<br/>购买商品成功!";
echo "<br/><a href='MyHall.php'>返回购物大厅</a>";
?>

第三个页面

ShowCart.php-------------展示

<?php
    session_start();
    echo "<h1>购物车商品有</h1>";
    foreach($_SESSION as $key=>$val){
        echo "<br/> -----------$val";
    }
?>

此处输入图片的描述

注意session中key-value的储存方式中,key不能为数字

思考:

如果用户禁用浏览器的cookie 那么就不能在一次会话中用同一份session

原因在于:在禁用cookie以后,的确是在服务器端创立了session文件, 服务器也的确是返回来set cookie的信息。但是因为浏览器禁用了cookie所以不会接受到。 所以每一次发送请求都会创建新的session,

当用户禁用cookie以后,每次访问的时候,都会创建一个session 后果就是无法让多个php页面去共享同一份session文件,糟糕了

解决方案:

从底层机制入手,首先要明白,为什么多个页面可以共享session。 从 cookie session http 这三个方面入手解决事情。

此处输入图片的描述

在没有禁用cookie的时候,会传递一个PHPSESSID这个东西,所以我们可以先获取这个PHPSESSID,然后我们自己来传递啊
然后叫服务器不要创建新的session,而是获取那个sessionId

在MyHall.php中添加如下东西

session_start();               //开启session
$sid=session_id();             //获取sessionid
echo "<a href='ShopProcess.php?bookid=001&bookname=第一本书&PHPSESSID=&sid>第一本书</a><br/>";

在ShowCart.php中添加如下东西

//不能让服务器创建一个新的session
//注意:设置session_id()必须在session_start()之前调用
if(isset(&_GET['PHPSESSID'])){
    session_id($_GET['PHPSESSID']);
}
session_start();

总结问题

请问客户端禁用了cookie,怎么实现session技术共享多个页面

答:

  • 方案一 在每个超链接上添加一个PHPSESSID=sessionId;
    同时在每个页面加入
    if(isset($_GET['PHPSESSID'])){
      // 设置session_id
      session_id($_GET['PHPSESSID']);
    }
    session_start();....
    
  • 方案二 使用常量 在超链接action header("Location:xx")可以直接拼接SID常量即可
    echo "sid===".SID.; 直接传入SID
  • 方案三 透明的SID支持
    php.ini 配置选项,里面有一个session.use_trans_sid=0设置为1
    (在herf action header会自动添加SID,但是js跳转不会自动增加); 重启apache可以生效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值