A. thinkphp做的session购物车,求详细代码。有完整例子的可以发下。非常感谢
<?php
classCartTool{
privatestatic$ins=null;
private$items=array();
finalprotectedfunction__construct(){
}
finalprotectedfunction__clone(){
}
//获取实例
protectedstaticfunctiongetIns(){
if(!(self::$insinstanceofself)){
self::$ins=newself();
}
returnself::$ins;
}
//把购物车的单例对象放到session里
publicstaticfunctiongetCart(){
if(!isset($_SESSION['cart'])||!($_SESSION['cart']instanceofself)){
$_SESSION['cart']=self::getIns();
}
return$_SESSION['cart'];
}
/*
添加商品
paramint$id商品主键
paramstring$name商品名称
paramfloat$ 商品价格
paramint$num购物数量
*/
publicfunctionaddItem($id,$name,$price,$brand,$thumb,$num=1){
if($this->hasItem($id)){//如果该商品已经存在,则直接加其数量
$this->incNum($id,$num);
return;
}
$item=array();
$item['id']=$id;
$item['name']=$name;
$item['price']=$price;
$item['brand']=$brand;
$item['thumb']=$thumb;
$item['num']=$num;
$this->items[$id]=$item;
return$this->items[$id];
}
/*
修改购物车中的商品数量
paramint$id商品主键
paramint$num某个商品修改后的数量,即直接把某商品的数量改为$num
*/
publicfunctionmodNum($id,$num=1){
if(!$this->hasItem($id)){
returnfalse;
}
$this->items[$id]['num']=$num;
}
/*
商品数量增加1
*/
publicfunctionincNum($id,$num=1){
if($this->hasItem($id)){
$this->items[$id]['num']+=$num;
}
}
/*
商品数量减少1
*/
publicfunctiondecNum($id,$num=1){
if($this->hasItem($id)){
$this->items[$id]['num']-=$num;
}
//如果减少后,数量为0了,则把这个商品从购物车删掉
if($this->items[$id]['num']<1){
$this->delItem($id);
}
}
/*
判断某商品是否存在
*/
publicfunctionhasItem($id){
returnarray_key_exists($id,$this->items);
}
/*
删除商品
*/
publicfunctiondelItem($id){
unset($this->items[$id]);
}
/*
查询购物车中商品的种类
*/
publicfunctiongetCnt(){
returncount($this->items);
}
/*
查询购物车中商品的个数
*/
publicfunctiongetNum(){
if($this->getCnt()==0){
return0;
}
$sum=0;
foreach($this->itemsas$item){
$sum+=$item['num'];
}
return$sum;
}
/*
查询购物车中商品的总金额
*/
publicfunctiongetPrice(){
if($this->getCnt()==0){
return0;
}
$price=0.0;
foreach($this->itemsas$item){
$price+=$item['num']*$item['price'];
}
return$price;
}/*
返回购物车中的所有商品
*/
publicfunctionall(){
return$this->items;
}
/*
清空购物车
*/
publicfunctionclear(){
$this->items=array();
}
}
以上是类文件,需要引入的。
$cart=CartTool::getCart();
$car_goods_list=$cart->all();//获取商品列表
$goods_num=$cart->getNum();//商品个数
$goods_sum_price=$cart->getPrice();//总价格
$cart->addItem($goods_id,$goods_list['goods_name'],$goods_list['shop_price'],$goods_list['brand'],$goods_list['goods_thumb'],$num);//增加一件商品到购物车
$cart->clear();//清空购物车
B. 购物车用session怎么实现的
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
response.setContentType("text/html;charset=utf-8");
PrintWriterout=response.getWriter();
//获得session
request.getSession();//创建了一个session
//获得所有商品
Map<String,Book>all=DB.getAll();
out.write("本站提供如下商品<br>");
for(Entry<String,Book>e:all.entrySet()){
Bookbook=e.getValue();
//超链接要url重写
//url重写做了两件事情,第一,获得session的id,第二,将id加到地址后面
Stringurl="/javaweb07/servlet/BuyServlet?id="+book.getId();
StringnewUrl=response.encodeURL(url);
out.write(book.getName()+"<ahref='"+newUrl+"'target='_blank'>购买</a><br>");
}
}
BuyServlet.java
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
//获得id
Stringid=request.getParameter("id");
//找出书
Bookbook=DB.find(id);
//获得购物车
HttpSessionsession=request.getSession();
Listcart=(List)session.getAttribute("cart");
if(cart==null){
//刚进超市,分配购物车
cart=newArrayList();
}
//加入购物车
cart.add(book);
//将购物车找个地方存起来,方便下次购买
session.setAttribute("cart",cart);
//第一次创建session的时候需要发Cookie,将sessionid带给浏览器
//获得sessionid
Stringsessionid=session.getId();
//发送cookie,Cookie的key是区分大小写
Cookiecookie=newCookie("JSESSIONID",sessionid);
//设置有效时间
cookie.setMaxAge(60*60*5);
response.addCookie(cookie);
//请求重定向到购物车页面
Stringurl="/javaweb07/servlet/ListCartServlet";
//url重写
StringnewUrl=response.encodeRedirectURL(url);
response.sendRedirect(newUrl);
}
ListCarServlet
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
response.setContentType("text/html;charset=utf-8");
PrintWriterout=response.getWriter();
//获取购物车
//getSession方法会拿着用户的jsessionid去内存找session找不到才创建
HttpSessionsession=request.getSession();
List<Book>cart=(List<Book>)session.getAttribute("cart");
if(cart==null){
out.write("对不起!您还没有购买商品!!!");
return;
}
//遍历购物车中的商品显示
out.write("您购买了如下商品:<br>");
for(Bookbook:cart){
out.write(book.getName()+","+book.getPrice()+"<br>");
}
//让session立即失效
//session.invalidate();
out.write("<inputtype='button'value='进入结算中心'/>");
}
C. 解释购物车一例的session技术的应用原理
主要的技术原理就是通过一个进行指向性的选择,然后实现购物车的功能。
D. 实现购物车(保存到session和数据库)
错了。SESSION也是服务器的,COOKIE才是客户机上的。保存在数据库上吧。安全些
E. session+cookies实现购物车功能,javaweb开发
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'shop2.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
</head>
<body>
<%
request.setCharacterEncoding("UTF-8");
Map<String,Integer> itm=(Map<String,Integer>)session.getAttribute("item");
if(itm==null){
itm=new HashMap<String,Integer>();
itm.put("电视", 1);
itm.put("苹果", 0);
itm.put("香蕉", 1);
itm.put("衣服", 0);
}
String [] buy=request.getParameterValues("c");
for(String b:buy){
if(b.equals("电视")){
int num=itm.get("电视");
itm.put(b, num+1);
}
if(b.equals("苹果")){
int num=itm.get(b);
itm.put(b, num+1);
}
if(b.equals("香蕉")){
int num=itm.get(b);
itm.put(b, num+1);
}
if(b.equals("衣服")){
int num=itm.get(b);
itm.put(b, num+1);
}
}
session.setAttribute("item", itm);
%>
你所购买的物品<br>
电视:<%=itm.get("电视") %>本<br>
苹果:<%=itm.get("苹果") %>个<br>
香蕉:<%=itm.get("香蕉") %>个<br>
衣服:<%=itm.get("衣服") %>件<br>
<p><a href="shop.jsp">再次购买</a></p>
</body>
</html>
下面是购买页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'shop.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
欢迎光临本店! <br>
<form action="shop2.jsp" method="post">
<input name="c" type="checkbox" value="电视" />电视
<input name="c" type="checkbox" value="苹果" />苹果
<input name="c" type="checkbox" value="香蕉" />香蕉
<input name="c" type="checkbox" value="衣服" />衣服
<img alt="dddd" src="<%=request.getAttribute("path")%>">
<p> <%=request.getAttribute("yy")%></p>
<input name="" type="submit" value="确认购买" />
</form>
</body>
</html>
下面是使用cookie的
添加Cookie
Cookie uname1=new Cookie("lname",username);
uname1.setMaxAge(24*3600);
Cookie upwd1=new Cookie("lpwd",pwd);
upwd1.setMaxAge(24*3600);
response.addCookie(uname1);
response.addCookie(upwd1);
添加session
session.setAttribute("log_name", username);
以下代码是对cookie和session的数据操作!
<%
String uname="";
String upwd="";
Cookie[] cookies=request.getCookies(); //一request获范围获取一个
cookie实例
if(cookies!=null){
for(Cookie c: cookies){
if("lname".equals(c.getName())){ //判断cookie里面的名字是否等于这
个
uname=c.getValue(); //如果等于就获取它的值
}
if("lpwd".equals(c.getName())){
upwd=c.getValue();
}
}
String sql2="select * from member where username='"+uname+"'";
ResultSet rs2=null;
rs2=DBHelper.executeQuery(sql2);
boolean is=true;
while(rs2.next()){
String pp=rs2.getString("upwd");
if(pp.equals(upwd)){
is=false;
}
}
if(session.getAttribute("log_name")!=null){ //判断是否有slog_name这
个session
uname=(String)session.getAttribute("log_name");
is=false;
}
if(is){
response.sendRedirect("index1.jsp");
}
}
%>
<%
application.setAttribute("log", uname);
%>
F. 我要用SSH做一网上购物系统,请问里面的购物车怎样用session做那个购物车呢
Session.add(key,value)
value可以复为制object类型
比如购物车,你可以先定义一个购物车的实体类
public class Buy
{
public proctID {get; set;}
public proctName{get; set;}
..............
}
然后建立List<Buy> buyList
再Session.add("Buy", buyList)
这样就可以了
G. 为什么说用session对象来表示电子商务中的购物车
一般来说购物车信息是存放在Session中的, 因为Session 便于管理. Session 不是在用户的电脑里的, 它是一次会话内, 所以是暂存在服务器上的容.(是否是在JVM中我不敢肯定, 好像实例化出来的对象和数据都是存放在JVM, 仅供参考)
Session 的性能不用担心, 因为是服务器和一个客户端之间的会话, 而且购物车中的内容不会太多, 所以不会影响到服务器的性能.
用Session做购物车有一点不好, 除非你Session有效期设置的很长, 否则的话, 用户在操作过程中, 一旦Session 超时, 购物车中的东西就会全部丢失.
提供者:高山流水
网络空间:http://hi..com/ww715519816/home
如有其它问题可以到空间留言咨询,或者网络知道直接提问。
H. 在做一个java web项目使用session保持购物车信息。
session表示当前会话,也就是说浏览关闭之后它就没有了,切换用户也会没有,最好保存在数据库中
I. jsp 中session的购物车问题
display.jsp 帮你修改了一下,有个小错误,见注释:
<%@page language="java" contentType="text/html; charset=gb2312"%>
<html>
<head>
<title>购物车</title>
</head>
<body>
<center>
您选购的商品
</center>
<br>
<hr>
<%
Integer itemCount = (Integer) session.getAttribute("itemCount");
if (itemCount == null) {
itemCount = new Integer(0);
}
%>
<%
String[] item = { "篮球", "足球", "乒乓球", "地球", "电脑", "电视机", "宝马",
"法拉利", };
String[] itemsSelected = request.getParameterValues("item");
String itemName = "";
if (itemsSelected != null) {
for (int i = 0; i < itemsSelected.length; i++) {
itemName = itemsSelected[i];
session.setAttribute("item" + itemCount, itemName);
session.setAttribute("itemCount", itemCount);
//itemCount++这句应该放在这里,不然session.getAttribute("item0")==null
//你对比一下原来的代码就知道为什么getAttribute("item0")是null了
itemCount = new Integer(itemCount.intValue() + 1);
}
}
%>
<%
for (int i = 0; i < itemCount.intValue(); i++) {
String items = (String) session.getAttribute("item" + i);
int ite = 0;
out.println(items + " ");
ite = Integer.parseInt(items);
out.println(item[ite] + "<br>");
}
%>
</body>
</html>
J. ASP.NET中如何用session来实现购物车的功能
Session 对象用于存储用户的信息。存储于 session 对象中的变量持有单一用户的信息,并且对于一个应用程序中的所有页面都是可用的。
Session 对象
当您操作某个应用程序时,您打开它,做些改变,然后将它关闭。这很像一次对话(Session)。计算机知道您是谁。它清楚您在何时打开和关闭应用程序。但是在因特网上有一个问题:由于 HTTP 地址无法存留状态,web 服务器并不知道您是谁以及您做了什么。
ASP 通过为每位用户创建一个唯一的 cookie 的方式解决了这个问题。cookie 被传送至客户端,它含有可识别用户的信息。这种接口被称作 Session 对象。
Session 对象用于存储关于用户的信息,或者为一个用户的 session 更改设置。存储于 session 对象中的变量存有单一用户的信息,并且对于应用程序中的所有页面都是可用的。存储于 session 对象中的信息通常是 name、id 以及参数。服务器会为每个新的用户创建一个新的 Session,并在 session 到期时撤销掉这个 Session 对象。
Session 何时开始?
Session 开始于:
•当某个新用户请求了一个 ASP 文件,并且 Global.asa 文件引用了 Session_OnStart 子程序时;
•当某个值存储在 Session 变量中时;
•当某个用户请求了一个 ASP 文件,并且 Global.asa 使用 <object> 标签通过 session 的 scope 来例示某个对象时;
Session 何时结束?
假如用户没有在规定的时间内在应用程序中请求或者刷新页面,session 就会结束。默认值为 20 分钟。
如果您希望将超时的时间间隔设置得更长或更短,可以设置 Timeout 属性。
下面的例子设置了 5 分钟的超时时间间隔:
<%
Session.Timeout=5
%>要立即结束 session,可使用 Abandon 方法:
<%
Session.Abandon
%>注意:使用 session 时主要的问题是它们该在何时结束。我们不会知道用户最近的请求是否是最后的请求。因此我们不清楚该让 session“ 存活”多久。为某个空闲的 session 等待太久会耗尽服务器的资源。然而假如 session 被过早地删除,那么用户就不得不一遍又一遍地重新开始,这是因为服务器已经删除了所有的信息。寻找合适的超时间隔时间是很困难的。
提示:如果您正在使用 session 变量,请不要在其中存储大量的数据。
存储和取回 session 变量
Session 对象最大的优点是可在其中存储变量,以供后续的网页读取,其应用范围是很广的。
下面的例子把 "Donald Duck" 赋值给名为 username 的 session 变量,并把 "50" 赋值给名为 age 的 session 变量:
<%
Session("username")="Donald Duck"
Session("age")=50
%>一旦值被存入 session 变量,它就能被 ASP 应用程序中的任何页面使用:
Welcome <%Response.Write(Session("username"))%>上面这行程序返回的结果是: "Welcome Donald Duck"。
也可以在 session 对象中保存用户参数,然后通过访问这些参数来决定向用户返回什么页面。
下面的例子规定,假如用户使用低显示器分辨率,则返回纯文本版本的页面:
<%If Session("screenres")="low" Then%>
This is the text version of the page
<%Else%>
This is the multimedia version of the page
<%End If%>移除 session 变量
contents 集合包含所有的 session 变量。
可通过 remove 方法来移除 session 变量。
在下面的例子中,假如 session 变量 "age" 的值小于 18,则移除 session 变量 "sale":
<%
If Session.Contents("age")<18 then
Session.Contents.Remove("sale")
End If
%>如需移除 session 中的所有变量,请使用 RemoveAll 方法:
<%
Session.Contents.RemoveAll()
%>遍历 contents 集合
contents 集合包含所有的 session 变量。可通过遍历 contents 集合,来查看其中存储的变量:
<%
Session("username")="Donald Duck"
Session("age")=50
dim i
For Each i in Session.Contents
Response.Write(i & "<br />")
Next
%>结果:
username
age如果需要了解 contents 集合中的项目数量,可使用 count 属性:
<%
dim i
dim j
j=Session.Contents.Count
Response.Write("Session variables: " & j)
For i=1 to j
Response.Write(Session.Contents(i) & "<br />")
Next
%>结果:
Session variables: 2
Donald Duck
50遍历 StaticObjects 集合
可通过循环 StaticObjects 集合,来查看存储在 session 对象中所有对象的值:
<%
dim i
For Each i in Session.StaticObjects
Response.Write(i & "<br />")
Next
%>
提供一些方法。