由于 Session 是以文本文件形式存储在服务器端的,所以不怕客户端修改 Session 内容。实际上在服务器端的 Session 文件,PHP 自动修改 Session 文件的权限,只保留了系统读和写权限,而且不能通过 ftp 修改,所以安全得多。

      Session 是存储在服务器端的,远程用户没办法修改 Session 文件的内容,因此我们可以单纯存储一个 $admin 变量来判断是否登陆,首次验证通过后设置 $admin 值为 true,以后判断该值是否为 true,假如不是,转入登陆界面,这样就可以减少很多数据库操作了。

使用session页面登录入口

新建一个简单的登录页面:

<form action="loginchuli.php" method="post">
<div>用户名:<input type="text" name="uid" /></div>
<div>密码:<input type="password" name="pwd" /></div>
<input type="submit" value="登录" />
</form>

  

新建一个类文件来访问数据库:

<?php
class DBDA
{
public $host="localhost";
public $uid = "root";
public $pwd = "";
public $dbname = "12345"; //成员方法
public function Query($sql,$type=1)
{
$db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname);
$r = $db->query($sql); if($type==1)
{
return $r->fetch_all();
}
else
{
return $r;
}
}
}

  

同目录下新建 loginchuli.php:

<?phpd
session_start(); //启动 Session 会话,并创建一个 $uid 变量:
include("../fengzhuang/DBDA.class.php");
$db = new DBDA(); $uid = $_POST["uid"];
$pwd = $_POST["pwd"]; $sql = "select pwd from users where uid='{$uid}'";
$attr = $db->Query($sql); $mm = $attr[0][0]; if(!empty($pwd) && $pwd==$mm)      
{
$_SESSION["uid"] = $uid;
header("location:main.php");
}
else
{
echo "登录失败!";
}

  

登录之后的主界面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<?php
session_start();
//echo $_SESSION["uid"]; if(empty($_SESSION["uid"]))      //防止用户跳过登录入口通过网页链接直接进入
{
header("location:login.php");
exit;
} $uid = $_SESSION["uid"];
include("../fengzhuang/DBDA.class.php");
$db = new DBDA();
$sql = "select name from users where uid='{$uid}'";
$attr = $db->Query($sql); ?>
<body>
<?php
echo "<h1>欢迎登录:{$attr[0][0]}</h1>"; ?>
</body>
</html>

  

用户只有登录成功后才可进入主界面,并且不能跳过登录口直接进入。

session实现的购物车效果:

可以通过session 设置中间变量

首先新建产品列表:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head> <body>
<table width="100%" border="1" cellpadding="0" cellspacing="0">
<tr>
<td>名称</td>
<td>价格</td>
<td>产地</td>
<td>库存</td>
<td>操作</td>
</tr>
<?php
include("../fengzhuang/DBDA.class.php");
$db = new DBDA(); $sql = "select * from fruit";
$attr = $db->Query($sql); foreach($attr as $v)
{
echo "<tr>
<td>{$v[1]}</td>
<td>{$v[2]}</td>
<td>{$v[3]}</td>
<td>{$v[4]}</td>
<td><a href='jia.php?code={$v[0]}'>加购物车</a></td>
</tr>";
} ?>
</table> </body>
</html>

  

结果:

判断有三种情况:

1.如果是第一次点击加购物车,做一个二维数组扔到SESSION里

2.如果不是第一次点击加购物车并且该水果第一次点击,做一个该水果的一维数组扔到SESSION的二维数组里面

3.如果不是第一次点击加购物车并且该水果不是第一次点击,将SESSION数组里面该水果的数量加1

规定路径下新建jia.php

<?php
session_start();
//将传过来的水果加到购物车
$code = $_GET["code"]; if(empty($_SESSION["gwc"])) //判断是否传入数据
{
//1.如果是第一次点击加购物车,做一个二维数组扔到SESSION里
$attr = array(
array($code,1)
); $_SESSION["gwc"] = $attr;
}
else
{
//判断该水果代号是否在SESSION数组里面出现
$attr = $_SESSION["gwc"];
if(PanDuan($code,$attr))
{
//3.如果不是第一次点击加购物车并且该水果不是第一次点击,将SESSION数组里面该水果的数量加1 for($i=0;$i<count($attr);$i++)
{
if($code == $attr[$i][0])
{
$attr[$i][1]++;
}
}
$_SESSION["gwc"]=$attr;
}
else
{
//2.如果不是第一次点击加购物车并且该水果第一次点击,做一个该水果的一维数组扔到SESSION的二维数组里面
$arr = array($code,1);
$attr[] = $arr;
$_SESSION["gwc"]=$attr;
} } var_dump($_SESSION["gwc"]); //判断v是不是在arr里面出现
function PanDuan($v,$arr)
{
$n = 0;
foreach($arr as $a)
{
if($v == $a[0])
{
$n++;
}
} if($n==0)
{
return false;
}
else
{
return true;
}
}

  

点击苹果:

有一个一维数组被扔到session 传导的二维数组里面

返回产品列表

再次点击苹果:

数量增加了1.

返回点击菠萝:

有新的一维数组被传入。

自此通过 session 将购物车的信息传入 session中,每个网页都可访问到。

退出及清理:

unset()不可以一次注销整个数组,这样会禁止整个会话功能 ,

如:unset($_SESSION)将全局变量$_SESSION销毁,而且没有办法将其恢复 ,用户也不能再注册 $_SESSION变量,
<?php
unset($_SESSION['views']); //删除单个session
?>

  

 
删除多个会话$_SESSION=array();

//删除多个会话,把一个空数组给$_SESSION,把之前的值覆盖了,这样并不是将$_SESSION销毁 ,还可以重新赋值
 
<?php
session_register();
$_SESSION["admin"]="aa";
$_SESSION['name']="叶凌月";
$_SESSION['age']=16;
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
//删除多个会话,把一个空数组给$_SESSION,把之前的值覆盖了,这样并不是将$_SESSION销毁 ,还可以重新赋值
$_SESSION=array();
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
?>

  

结束当前的会话:

session_destory();

 
<?php
Session_start(); //销毁全部session
//...
session_destroy();
?>

  

使用session页面控制登录入口及购物车效果的实现的更多相关文章

  1. 详解springmvc控制登录用户session失效后跳转登录页面

    springmvc控制登录用户session失效后跳转登录页面,废话不多少了,具体如下: 第一步,配置 web.xml <session-config> <session-timeo ...

  2. session过期返回登录页面跳出frame

    session 过期返回登录页面 方法1, HttpSession session = request.getSession(); String LOGIN_ID = (String) session ...

  3. Session的使用(登录例案+其它页面访问)

    本程序功能是使用Session将用户输入的用户名保存在Session中(登录成功情况下,登录失败不会有Session值),其它页面想访问时会先判断是否有之前存的Session值. 登录Login.ht ...

  4. struts2拦截器实现session超时返回登录页面(iframe下跳转到其父页面)

    需求:session超时时,返回登录页面,由于页面嵌套在iframe下,因此要跳转到登录页面的父页面,但是首页,登录页面等不需要进行跳转 实现: java文件:SessionIterceptor.ja ...

  5. session过期,登录页面嵌套问题解决

    项目主页是框架模式时,如果登录后长时间没有活动(操作),存储在session中的登录信息过期了,这时再去进行操作时,就会出现登录页面嵌套的问题,怎么解决呢? 这里介绍一种方法,只需要加上一段javas ...

  6. ecshop 完美解决动态ip登录超时和购物车清空问题

    ecshop 完美解决动态ip登录超时和购物车清空问题 ECSHOP模板/ecshop开发中心(www.68ecshop.com) / 2014-05-06 前一段时间,ECSHOP开发中心的一个客户 ...

  7. 通过IP控制登录系统

    项目中有这么一个需求,就是系统仅仅能在指定ip下登录,能够理解为内部系统,仅仅能够在公司訪问 我的代码是这样写的:入不入流不知道,但能解决这个问题. 获得訪问IP代码: String ip = req ...

  8. php 用户访问菜单页面,必须登录,判断用户是否登录

    <pre name="code" class="python"># 本节课大纲: 一.空模块和空操作 1.空操作 function _empty($ ...

  9. SpringBoot Web开发(5) 开发页面国际化+登录拦截

    SpringBoot Web开发(5) 开发页面国际化+登录拦截 一.页面国际化 页面国际化目的:根据浏览器语言设置的信息对页面信息进行切换,或者用户点击链接自行对页面语言信息进行切换. **效果演示 ...

随机推荐

  1. ABP文档 - Javascript Api - Message

    本节内容: 显示信息 确认 Message API给用户显示一个信息,或从用户那里获取一个确认信息. Message API默认使用sweetalert实现,为使sweetalert正常工作,你应该包 ...

  2. Android-armebi-v7a、arm64-v8a、armebi的坑

    先来一波扫盲: armeabi:针对普通的或旧的arm v5 cpu armeabi-v7a:针对有浮点运算或高级扩展功能的arm v7 cpu(32位ARM设备) arm64-v8a:64位ARM设 ...

  3. C++ 拷贝构造函数和赋值运算符

    本文主要介绍了拷贝构造函数和赋值运算符的区别,以及在什么时候调用拷贝构造函数.什么情况下调用赋值运算符.最后,简单的分析了下深拷贝和浅拷贝的问题. 拷贝构造函数和赋值运算符 在默认情况下(用户没有定义 ...

  4. 微信小程序IDE(微信web开发者工具)安装、破解手册

    1.IDE下载 微信web开发者工具,本人是用的windows 10 x64系统,用到以下两个版本的IDE安装工具与一个破解工具包: wechat_web_devtools_0.7.0_x64.exe ...

  5. Java类访问权限修饰符

    一.概要 通过了解Java4种修饰符访问权限,能够进一步完善程序类,合理规划权限的范围,这样才能减少漏洞.提高安全性.具备表达力便于使用. 二.权限表 修饰符 同一个类 同一个包 不同包的子类 不同包 ...

  6. Javascript高性能编程-提高Dom访问速度

    在浏览器中对于Dom的操作和普通的脚本的操作处于两个不同的dll中,两个dll的交互是比较耗时的,优化对Dom的操作可以提高脚本的执行速度.下面是对如何优化的一些总结: 将需要多次操作的节点存储在一个 ...

  7. Android MVP+Retrofit+RxJava实践小结

    关于MVP.Retrofit.RxJava,之前已经分别做了分享,如果您还没有阅读过,可以猛戳: 1.Android MVP 实例 2.Android Retrofit 2.0使用 3.RxJava ...

  8. Oracle常用SQL函数整理

    --返回ASCII码select  ASCII('A') "A的ASCII码" ,ASCII('a') "a的ASSCII码" from dual ; --反向 ...

  9. Linux上课笔记--随手记Linux命令

    初次接触Linux就是感觉这系统不够友好不够人性化,因为首先接触电脑就是win,图形化界面什么操作都可以清晰看到.随着更多的接触越来越发现Linux的强大,虽然我只是一个小白,可我就是爱上他了.现在就 ...

  10. 枚举:enum

    枚举 所谓枚举就是指定好取值范围,所有内容只能从指定范围取得. 例如,想定义一个color类,他只能有RED,GREEN,BLUE三种植. 使用简单类完成颜色固定取值问题. 1,就是说,一个类只能完成 ...