多用户操作系统一般来讲就是指分时操作系统,若干终端联机使用同一台电脑。终端机只是一个输入输出设备(比如只有键盘、显示器、打印机),没有运算与存储能力。每个用户通过各自的终端机使用同一台计算机,计算机按设定好的时间片轮转为各个终端服务,使得每个用户感觉只有自己一人在使用计算机。
多用户系统在网络上很常见,比如淘宝网或者携购网上的店铺就是最典型的多用户系统,每个店主都有一个自己">二级域名的小店(如:http://shop88888888.xiegoo.com/),看上去大家都是各自独立的,但从技术曾面来看,其实每个店铺使用的都是同一套程序,唯一的差别就是店铺的界面和数据。
相信实现这样的二级域名指向不同店铺的功能,对大部分程序员来说不是件难事,因为shop后面的88888888里隐藏了店铺唯一的id,通过shop88888888把这个店铺的界面和数据从数据库里筛选出来是很简单的,我在这里也不详细解释。但是我们经常在网上看到很多“多用户商城”或者“建站系统”,支持绑定国际域名,比如携购旗下的独立网店系统http://www.shopxg.com/,只要在线注册,在线绑定国际域名,就能访问自己的网店了。笔者曾经参与开发shopxg,把如何实现这样的功能,拿出来与大家分享,当然可能不是最好最有效的方法,但希望能帮到那些正在为解决这个问题发愁的技术朋友。
因为shopxg是用.NET开发的,所以下面我讲到的情况可能不适合其他语言的系统,但原理是相通的,希望能给您一点启示。
第一步:设计数据库的时候,在“店铺shop”这张表里,要设置一个字段,存放国际域名;
第二步:在shopxg的站点上做泛解析,就是让任何指向到shopxg网站所在服务器的国际域名,都会绑定到shopxg上,至于如何做泛解析,您可以到google查下;
第三步:拿前台的index.aspx页面举例,当一个客户输入www.yifull.com/ShopLogin.aspx和www.tiaopidan.com/ShopLogin.aspx的时候,ShopLogin.aspx页面要马上获取到当前输入的域名,比如使用Request.ServerVariables["SERVER_NAME"].ToString();当然shopxg使用的是URLRewrite的重写技术来获取当前域名的,这样的方法有很多,您可以自己选择;
第四步:利用当前的域名,到数据库中精确匹配到某个店铺,然后把该店铺的数据取到前台显示;
当然上面的几步都是非常容易实现的,不是什么难题,但实现了一个多用户系统中每个店铺各自绑定国际域名之后,有很多小问题是不容忽视的:
1、每个页面频繁的获取当前域名,然后到数据库匹配,才知道是哪个店铺在请求数据,会导致系统效率低下,因此我们要让客户在第一次访问一个域名的时候,把获取回来的店铺编号放进本地cookies,当客户继续访问或者下次来访问的时候,直接从cookies里就能知道当前的域名对应的是哪个店铺了;