http://www.google.com/search?hl=zh-CN&ie=UTF-8&oe=UTF-8&q=php+session&btnG=Google%E6%90%9C%E7%B4%A2&lr=lang_zh-CN

解决方案 »

  1.   

    http://netschool.ayinfo.ha.cn/200105/phpsessionsyct.htm
      

  2.   

    http://www.chinabs.net/php/default.asp?infoid=11
      

  3.   

    仅用PHP4 Session实现的迷你购物篮(一)作者:Evert Smith 翻译:limodou 介绍 
      如果你还没有用PHP 实现你自已的购物篮,在读完这篇文章之后你应该可以创建一个了。甚至你可能已 
    经有了一个购物篮,我在这里所提供的一些技巧可能会帮助你改善你的系统。   我将给你一些提示,关于如何去做也许才能减少对购物篮表的无限的查询,或减少无限的文本文件填充 
    你的文件系统,因为应用程序只会做但不会删除它们。   如果你对这类的题目是个新手,不要害怕。它实际上相当简单和有效,你只需要一个支持php4的主机, 
    象notepad或vi之类的html编辑器,你宝贵的几分种,和这个小例子。 
    想法 
      在1998年,我有一个在硬件商店工作的朋友要求我为他们编写一个在线商店。需要快速和简单,同时还 
    要有在线管理。当我发着39度高烧的时候我变得想当有创建力,所以我用perl写了那个东西,使用minisql 
    作为后端。在整个处理中我插入了我所提到的迷你购物篮。   这个迷你购物篮与平常的购物车只有很小的不同,它会在每一页显示你的购物车的东西,不需要在放入 
    一件东西后在购物车来回跳转。这就是我写这篇文章的初衷。 
    目标 
      人们喜欢控制,那么为什么不给他们些透明度,以便让他们相信拥有了控制?这个迷你购物篮演示了一 
    个完美的方法:它提供给人们所必须的信息,并且节省了他们一次点击,接近了在线商店的3击范例。   所以,目标就是在任何时候将这个迷你购物篮显示为你的页面上的一部分,在结尾处提供一个摘要用以 
    修改购物篮中的物品,接着在最后发送一个订单。 要求 
      你应该知道什么是session。如果不知道,这里有一个快速的纲要。已经有很多文章关于这个话题,你 
    可以从中找到所有你需要的代码例子。在你的开始页面打开一个session,使用 <?php session_start(); ?>   这样将创建一个session名字和一个session id。你现在既可以使用缺省的通过基于cookie的设置session 
    的方式,通过一个表单来传递session id,或把它作为一个变量附在你的链接上(get方法)的方法。不要忘 
    记在最后释放session。:)   你的商品应该有一个名字,价格和唯一标识,以便能用在这个例子中,如果不这样,你可能需要做一点 
    修改。这里我使用mysql作为后端以便建立页面及其它,为了让购物能工作这不是必须的。:)   你应该了解数组。现在如果有人有时间利用我的代码并且创建一个它的类,我理所当然地要感激得到它。 定义 
      为了简化这个例子,我使用了四个独立的数组和一些额外的变量。代码可以被优化。这样可以很容易地 
    显示想法和阅读代码。可以使用类更好的完成,但是我不能十分肯定是否能够把对象保存到session 里。有 
    人想对此发表评论吗?   我们还需要一个项目计数器。当然可以使用count() 命令来实现,我只不过认为它足够好,以便总能知 
    道有多少的项目,并且它也为循环提供了一个好的计数器。 工作 
      让我们假设在你的HTML页中有一个商品列表 ID Name Price 
    1 Mouse 25.00 add 
    2 Key 100.00 add 
    3 Car 5000.00 add 
    4 Game 25.00 add 向你的页面增加链接   上面的'add'字段应该是一个链接,用来将商品放到迷你购物篮中。使用$PHP_SELF将这个链接指向它自 
    已。然后向它增加商品信息。这里是商品1的例子。 <A HREF="<?echo $PHP_SELF;?>?id=1&price=25&basket=Mouse">add</A>   商品的名称能够包含空格,所以将它放在链接的最后。Get方法好象对这个很挑剔。 准备迷你购物篮   为了代码重用,让我们创建一个额外的文件minibasket.inc。我使用.inc扩展名来标识我的包括文件。 
    使用这个外部文件的原因是,尽管你将使用session变量来传递给购物篮,代码仍然需要有效。这个文件将 
    包含显示迷你购物篮的代码,也包话增加项目的函数。实现它的最好的地方是将 <?php include ("minibasket.inc"); ?> 命令放在你需要的地方。 minibasket.inc的逻辑   花些时间考虑一下这个。迷你购物篮应该是个什么样子,它需要些什么特性?这里显示的迷你购物篮应 
    该看上去象这样: # Name Price 
    1 Mouse 25.00 
    3 Game 75.00 
    Total 100.00   你可以很容易的通过使用一个外部样式表格式化这个输出。可是,它不应该太大。这个迷你购物篮是一 
    个信息,然而它不应该成为你所显示页面的焦点。   这个文件的逻辑非常简单。 检查是否需要增加一个新的项目。 
    如果true,增加项目 
    在加入中,它要检查复重的记录,通过更新数量和价格来更新存在的记录。 
    片段1。检查将要增加的新的项目   这是一个正常的IF语句,用于检查$basket变量的值。 <?php if ($basket!=""){ 
    //向篮子中加入项目 
    } ?> 片段2。在浏览器中显示篮子 <?php if ($ses_basket_items>0){ 
    // 如果在篮子中有项目 
    for ($basket_counter=0;$basket_counter<$ses_basket_items;$basket_counter++){ 
    // 遍历篮子,打印出每一行 
    // 你当然可以用格表来格式化显示 
    // 需要通过格式化来显示价格的分值。如果没有格式化,则.00是不会显示出来的 
    $price=sprintf("%01.2f",$ses_basket_price[$basket_counter]); 
    $amount=$ses_basket_amount[$basket_counter]; 
    $name=$ses_basket_name[$basket_counter]; 
    echo "$amount $name $price"; 
    echo "<BR>\n"; 

    } else { 
    // 在篮子中没有商品 
    // 设置项目计数为0,且清除所有的变量 
    // 这是一个清除处理。它防止人们得到旧的数组 
    $ses_basket_items=0; 
    unset($ses_basket_name); 
    unset($ses_basket_amount); 
    unset($ses_basket_price); 
    unset($ses_basket_id); 
    } ?>   这段代码不会产生任何结果。项目还没有被填充,篮子总是空的,所以篮子不会被显示。那么让我们向 
    这个篮子中加些项目吧。 
    (=)
    作者:Evert Smith 翻译:limodou 片段3。创建新的篮子并向其中增加一条项目 <?php // 将项目计数设为1 
    $ses_basket_items=1; // 填充4个数组的第0个位置,使用从href链接传过来的值 
    // 链接是在‘给你的页面增加链接’部分所讲的 
    $ses_basket_name[0]=$basket; 
    $ses_basket_amount[0]=1; 
    $ses_basket_price[0]=$price; 
    $ses_basket_id[0]=$id; // 在session中注册新的篮子 
    session_register("ses_basket_items"); 
    session_register("ses_basket_name"); 
    session_register("ses_basket_amount"); 
    session_register("ses_basket_price"); 
    session_register("ses_basket_id"); ?>   这样将创建一个篮子,将所以的值填在数组第0个位置上,并利用session注册数组。一个篮子诞生了。 
    片段4。填充篮子 <?php $basket_position_counter=0; //篮子中的位置 
    $double=0; //双重入口标志设为NO 
    if ($ses_basket_items>0){ 
    // 检查是否篮子包含的项目中有双重入口 
    foreach ($ses_basket_name as $basket_item){ 
    // 遍历数组所包含的名字,检查是否与从href所传来的相配匹 
    if ($basket_item==$basket){ 
    // 如果在篮子中已经有了一个项目,将flag设为1 
    $double=1; 
    // 记住项目的位置,将进行更新 
    $basket_position=$basket_position_counter; 

    $basket_position_counter++; //增加篮子中的实际位置 

    } // 更新篮子 
    if ($double==1){ 
    // 如果项目在你的篮子中已经存在则更新在$basket_position处理的数量和位置 
    $oldamount=$ses_basket_amount[$basket_position]; 
    $ses_basket_amount[$basket_position]++; 
    $amount=$ses_basket_amount[$basket_position]; 
    $oldprice=$ses_basket_price[$basket_position]; 
    //更新价格 
    $newprice=($oldprice/$oldamount)*$amount; 
    $ses_basket_price[$basket_position]=$newprice; 
    }else{ 
    // 如果它不在你的篮子中,则在数组末尾增加新的项目 
    $ses_basket_name[]=$basket; 
    $ses_basket_amount[]=1; 
    $ses_basket_price[]=$price; 
    $ses_basket_id[]=$id; 
    $ses_basket_items++; 
    } ?>   太好了,现在你可以填充迷你购物篮并显示它了。 将代码片断组织到一起   让我们将代码组织到一起并且存为minibasket.inc。 <?php // 记住在代码片段1中, 决定是不是要增加? 
    // 让我们在这里重复它 
    if ($basket!=""){ 
    // 在这里,项目将要加到篮中。让我们检查一下是否存在一个注册过的篮子 
    if (session_is_registered("ses_basket_items")){ 
    // 存在一个注册过的篮子,将代码片段4放在这里。 
    // 它增加项目到注册过的篮子中,检查重复记录,更新它们或在数组的最后增加项目 
    } else { 
    // 不存在注册过的篮子,将代码片段3放在这里。它创建一个新的篮子,并且 
    // 通过session注册它。 


    // 剩下的都是代码片段2。如果篮子中有物品时用于显示它们。 
    // 加到这里。 ?>   瞧,不错吧。"c'est tout", 法国人会这样说。如果都做好了,你可以保存这个文件为minibasket.inc 
    并且将其包括到显示商品的PHP页面中。 Zip格式的minibasket.inc和basket.php 上一页 
      

  4.   

    session是要产生临时文件,这些文件是存在服务器里的,但是我租的是墟拟主机,它们并不支持让存session文件,这怎么办,用COOKS行吗
      

  5.   

    谢谢大家
    我想使用虎翼网的主机,不知道是否支持session?有用过的吗?需要PHP4.0.1以上版的吧