全国统一咨询热线:18609840880

WAP网站建设开发经验总结之五

2016-04-12 11:20:24

  40. 为什么在HTTP中的Referer看不见?

  当HTML浏览器从一个URL到另外一个URL的时候,它默认地会发送一个叫做 Referer的 HTTP头给服务器,告诉它在浏览这个页面之前的那个页面。这是一个非常有用的特点,在WAP环境中同样也有。

  但是既然这个信息来自用户代理(浏览器)、WAP设备,通常为了节约带宽和时间,就被省略了。

  为了使用 Referer ,应该使用新的URL标签例如: ,等等,并且加入参数:sendreferer。

  这样就会把参考的URL发送到服务器。

  41. 如果没有找到URL,有可能重新将用户引导到另外一个WML卡片或者页面吗?

  是的。但这是服务器端的特点,与客户端没有关系。

  42. 为什么普通的HTTP 302重新导向不好使?

  这的确是一个事实。核心的问题是在服务端的脚本语言,而不是在服务端语言和服务器之间。

  所谓的302 Found HTTP反应是指服务器告诉用户代理,它所需要的资源在另外的地方可以找到。302反应可能包括一个人们可理解的信息,如果在这种情况下“ Content-type: ”就被设置了

  。笔者所测试过的服务器,即使没有内容也都加了“Content-type:”。默认的 “Content-type:” 是text/html。当然有些网关不喜欢这个类型。

  以下的例子已经经过测试,在Apache和Microsoft Internet Information Server都可以工作。如果使用其他的Web Server,或者其他的脚本语言,需要能转换这些简

  单的脚本。关键的工作是十分简单的,除非需要,不用告诉服务器整个HTTP头。大多数Web Server将自动完成这个HTTP头,使得用户代理可以理解。

  43. 可能在WML中实现ASP Session吗?

  不可能。可以把信息存储在临时变量中模拟Session。Session是保存在用户PC上的“cookies”中。目前的WAP设备不支持“cookies”。不过下一代的设备和WML可能支持“cookie

  s”。

  44. WAP支持Session吗?

  在HTML中,一个十分普遍的“处理”用户的方法就是为每个用户分配一个“session”。这个有时候是通过指定一个独一无二的cookies来实现的。然而WAP的资源非常有限,因此session的处理必

  须以不同的方式来处理。

  另外一种方法是使用 PHPlib ,它是使用 PHP 编写的。

  45. 可以在WAP中使用Cookies吗?

  在理论上是可以的,但不是所有的WAP设备都支持。另一个方法来管理会话是使用隐藏的fields(包含会话标识,无论是POST或者GET方式)。

  46. WAP支持Cookies吗?

  普通的HTTP Cookies是作为WAP的扩展来实现的。无论你以前听到什么,Cookies的支持将越来越好。实际上Phone.com的 UP.Link网关已经支持这个功能有一段时间了。

  可以使用以下的脚本语言检测Cookie-support,:

  当先进次看见卡片的时候,记数器应该为0。所有的Cache都被关闭。卡片通过在URL中随机地加入变量来强制自己加载(笔者不推荐这种强制加载办法)。当点击增加计数连接,页面将重新加载,卡片就再次出现,并

  且记数器变成1。

  在脚本中,Cookie的名字被称做 TestCookie,它有很长的生命期,因此可以隔好几天再来查看记数器,它将是上一次的数值。这要求你能使用与上一次访问所使用的WAP环境一样,否则将把你的数值清0

  。

  如果记数装置一直都是0,那么cookie 就没有能传送到你的Web Server。这个脚本也能表示Cookie是否被传送。

  另外,这个脚本同样还显示HTTP头中的HTTP_VIA 和 HTTP_USER_AGENT 。这些能够得到所使用的网关和模式。一些网关使用HTTP_VIS标识自己,而另外一些使用HTTP_USER_

  AGENT,还有一些则让程序无法知道。

  下面是它的PHP代码。一个标准的 PHP setcookie() 函数只有在这种脚本语言中才会出现。函数只是简单地设置cookie,并且PHP变量 $HTTP_COOKIE_VARS 用来读取coo

  kie。

  if(isset($HTTP_COOKIE_VARS["TestCookie"]))

  {// Check if TestCookie is set

  $cookieset = "set";

  // Read the Cookie

  $cookieid = $HTTP_COOKIE_VARS["TestCookie"];

  // and increase its value

  $cookieid++;

  }

  else {

  // cookie was not set

  $cookieset = "not set";

  // start counter at zero

  $cookieid = 0;

  }

  // apply the Cookie to the HTTP header

  setcookie("TestCookie",$cookieid);

  // set the content type for WML

  header("Content-type: text/vnd.wap.wml");

  // disable ALL caching

  header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

  header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

  header("Cache-Control: no-cache, must-revalidate");

  header("Pragma: no-cache");

  echo("/n");

  echo("

  echo("/n");

  echo("/n");

  // Generate random value for reload forcing

  $random = mt_rand(100000,999999);

  ?>

  // Even more cache disabling

  Cookie "TestCookie" was .

  Value is currently ""

  Increase value

  Gateway:

  if(isset($HTTP_VIA))

  { // Is there something in the HTTP_VIA variable?

  echo($HTTP_VIA);

  }

  else {

  if(isset($HTTP_USER_AGENT))

  { // Is there something in the HTTP_USER_AGENT variable?

  echo($HTTP_USER_AGENT);

  }

  else {

  // Absolutely no identifier was found

  echo("Unknown");

  }

  }

  ?>

  47. 如何使用WAP设备发送E-Mail?

  在HTML中有一个默认的E-Mail机制:“ mailto:” 。但在WML中不好使,因此E-Mails必须通过WML表单来解决。例如:

  From:

  To:

  Subject:

  Message body:

  Send this mail

  如果想使用一个类似于发信的过程,就需要编辑变量名。另外发送的数据是有限的,长信息可能需要打断。

  为了演示它是如何工作的,下面的 PHP 脚本可以用来处理Mail。它将格式化WML页面,告诉用户是否发出信件。在真实的应用中,应该加入检测,例如:E-Mail的合法格式。

  // Tell the client that this is a WML deck

  header("Content-type: text/vnd.wap.wml");

  echo("/n");

  echo("

  /"http://www.wapforum.org/DTD/wml_1.1.xml/">/n");

  // The name of your mail server

  $mailer = "wap.colorline.no";

  // Format the from field

  $from = $from." (WAP user at ".$mailer.")";

  // Add the from field and some character handling to the extra headers

  $extraheaders = $from."/nContent-Type: text/plain;

  charset=iso-8859-1/nContent-Transfer-Encoding: 8bit";

  // Start sending out the WML deck

  echo("/n");

  if(mail($to,$subject,$body,$extraheaders))

  {// Use PHP's internal mail functionality

  // Mail was successfully sent

  echo("/n");

  echo("

  Mail was sent successfully

  /n");

  echo("/n");

  }

  else {

  // The mail could not be sent

  echo("/n");

  echo("

  Unable to send mail

  /n");

  echo("/n");

  }

  echo("/n");

  ?>

  因为安全性的原因,以上的代码没有演示程序。

  48. 可以在模拟器上操作本地的页面,却没有办法访问Internet上的,有什么问题吗?

  大多数模拟器和工具都可以浏览Internet、Intranet和本机的页面。但是在访问一些大公司页面的时候,必须通过代理服务器来取得进入Internet的权限。如果必须通过这个代理服务器来取得HTM

  L页面,那么你的WAP模拟器也会取得权限来访问Internet。

  注意到有些模拟器不支持代理服务器,但是大多数是支持的。在模拟器里面设置这些是很简单的。用户所做的只需要将代理主机的名字、IP地址和端口号输入就可以了。如果没有找到,你可以在 systems/netw

  ork 管理器里面设置这些,也可以检查 Netscape/IE的设置。

  在某些情况下,代理服务器使用 userid 和 password 来取得进入Internet的权限。有些模拟器支持用户代理服务器,用户应该能告诉模拟器相关的代理配置。

  在极少的情况下,使用代理服务器(如Microsoft Proxy Server,)的用户会遇到更多的问题。这个代理服务器只接受一种验证方式(userid/password)。这种验证被称做 NTLM

  ,并且是某种 MS 的验证方式。几乎很少有模拟器支持这种方式。因此好是避免使用它,或者让管理员使用“Basic Authentication”方式以避免更多的麻烦。