【问题标题】:Client Side Data saving with PHP/Javascript使用 PHP/Javascript 保存客户端数据
【发布时间】:2010-08-22 19:16:16
【问题描述】:

我想创建一个类似于 craiglist.org 的网站。如果您访问该站点并单击任何城市,它会将您重定向到城市子域。之后,无论何时您访问 craiglist.org,它都会将您重定向到 city 子域。所以我需要将城市/国家名称保留在我客户的机器上。

起初我以为我可以通过设置过期时间的 Cookie 来做到这一点。我试过了,但是当我关闭浏览器时过期时间不起作用,这意味着当会话结束时它不再获取 cookie。

但是如果 cookie 没问题,那么目的地也可能不合适,就像我从 Mozilla 浏览网站并关闭并使用 IE 打开网站一样,它应该将我重定向到使用 cookie 无法访问的网站我想?

你能给我一些建议吗?我该怎么做。我打算用 Codeigniter/Php 来做这个应用程序。

谢谢 召唤

【问题讨论】:

    标签: php javascript jquery codeigniter


    【解决方案1】:

    cookie 是正确的方法。 你不能实现跨浏览器的东西......你可以使用 Flash cookie 或重新检测 IP 地址等,但那很愚蠢......

    craiglist.org 似乎会根据我的 ip 地址来自哪里来重定向我。 要做到这一点,你应该看看这个网站:http://www.maxmind.com/app/geolitecity

    一般来说,您应该始终为用户提供手动切换的可能性。

    从可用性优化的角度来看,我建议以下方案:

    1. 用户点击欢迎页面
    2. 欢迎页面使用 geoip 检测用户所在城市 3.1 如果城市被成功检测到用户被直接跳到子站点,cookie被保存 3.2 如果没有成功检测到城市,欢迎页面显示一个选择列表。一旦用户点击一个选择列表,cookie就会被设置并且用户得到指定的子站点
    3. 在每个子站点的顶部“切换城市”或其他东西上都有一个清晰可见的按钮。 如果用户点击它,他会进入欢迎页面,但是带有参数“userelection=true” ro 的东西,因此自动 ip 检测和重定向不会启动。 用户选择所需的子站点,获取 cookie 并被重定向。 5. 如果用户再次点击欢迎页面并找到 cookie,他会被重定向到子站点,cookie 可以被覆盖,没问题...

    最简单的解决方案是使用 php 设置 cookie,然后进行标头重定向!

    这样你就消除了javascript,可以关闭什么的。

    只需使用这个 php 命令:

    setcookie("city", $value, time()+(86400*365));
    

    或类似的东西。这是手册页:

    http://php.net/manual/en/function.setcookie.php

    您可以使用

    检查 cookie 值
    if($_COOKIE['city'] != '') 
    

    编辑:

    除了困惑我现在在这里为您提供了一个工作示例,只需将其粘贴到 php 文件中并将其保存到您的网络服务器:) 不需要检查子站点,因为您说您正在重定向到外部网站(子域)反正。 请记住,如果您将其设置在另一个子域上,则无法从子域访问 cookie!可能这是你的问题,因此检查和重定向到他的引导文件。

    好吧,你去吧。任何问题?评论!

        <?
    /* this is if we are at a subsite. you wont need that as it will be external subdomains anway just for the purpose of a working example here.*/
        if($_GET['subsite']!="") {
    /* the change link has the paramenter userselection which overrides any autoamtic detection by cookie or ip or whatever, this is important if the user wants to change or the automatic change fails or is wrong*/
         ?>
          you are now at the subsite of <?=$_GET['subsite'];?><br/>
          <a href="?userselection=true">click here to change</a>
          <?
        }
        else {
    /* only try to automatically redirect if we have either cookie or user specified data, but dont if the flag userselectino is true. because the user wants to change.
    you could ip-detect the city at this point.
    */
         if(($_GET['go']!=''||$_COOKIE['city']!='')&&$_GET['userselection']!='true') {
    /* if we had ip detection the priority of it would probably go here */
          $target=$_COOKIE['city'];
    /* the get varaible overrides the cookie value as its user supplied and more important*/
    
          if($_GET['go']!='') {
           $target=$_GET['go'];
          }
    /* set the cookie, don't care if it already has been set*/
          setcookie('city',$target,time()+(86400*365));
    /* redirect the user */
          header('Location: ?subsite='.$target);
         }
         else {
    /* well we either have neither cookie nor user specified city or the user wanted to change teh city, lets display the selection dialog!*/
          ?>
            hello! select your city:<br/>
            <a href="?go=vienna">vienna</a>
            <a href="?go=newyork">new york</a>
            <?
         }
        }
        ?>
    

    【讨论】:

    • 但是我使用cookie的方式和你说的一样,比如 setcookie('city', 'boston', time()+60*60*24*6004);但是浏览器关闭后它不起作用。而且跨浏览器也不行?
    • 那么你搞错了。我很快就会为您提供一些工作代码,将其作为编辑添加到答案中
    • Joe,有没有办法从其他浏览器中找到保存的 cookie?我不这么认为?
    • 我认为是 .swf ?但是有没有其他方法只使用javascript或者像这样?
    • 是的,swf 是可能的。但请不要那样做。普通的饼干就好了!并且 swf 也不能保证,例如 firefox 和 chrome 有自己的插件,而 Internet Explorer 使用系统上安装的 flash 播放器......所以这也不起作用;) javascript: no
    【解决方案2】:

    cookie 是执行此操作的最佳方式;如果关闭浏览器后网页浏览器的 cookie 没有被重新加载,那么您在创建 cookie 时一定有问题。

    查看setcookie() 的PHP 文档:http://us3.php.net/set_cookie,确保您提前提供了过期时间,例如strtotime("+300 days")。在服务器上,要读回 cookie,只需使用 $_COOKIE 超级全局。链接:http://us3.php.net/manual/en/reserved.variables.cookies.php

    另外,请务必检查您的浏览器设置以处理cookies...也许它被设置为在关闭浏览器后删除cookies。

    最后,您还可以使用用户的 IP 地址 - 但请注意,如果用户位于同一个局域网(例如大学或公司)上,他们可以共享同一个 IP 地址。您甚至可以使用http://ipinfodb.com/等IP位置查找服务自动选择位置


    您可以在 Firefox 中检查您网站的 cookie,方法是转到

    Tools -&gt; Page Info -&gt; Security -&gt; View Cookies

    【讨论】:

    • 我使用了正确的方法来设置cookie和设置时间,但它不起作用需要查看浏览器设置。但是如果这样的话它不会解决问题,就像我用 IE 浏览并再次用 Mozilla 浏览它不会得到 IE 创建的 cookie?
    • 正确,每个浏览器都有自己的一组cookie。
    • 我认为使用 .swf 我们可以为所有浏览器制作 cookie 吗?但是有没有其他方法只使用javascript或者像这样?
    【解决方案3】:

    尝试跨浏览器保存浏览器状态似乎不合逻辑。如果用户切换浏览器,通常不能保证他们拥有相同的浏览器设置,除非他们在该网站上拥有帐户。

    如果他们是注册用户,您应该在数据库中存储您需要的任何状态,并在登录时检索它。然后您可以随时将数据缓存在客户端 cookie 中,因此您无需每次都获取它。

    在我看来,为匿名用户在不同浏览器中存储浏览器事件是不值得的。

    【讨论】:

      猜你喜欢
      • 2017-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      • 2017-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多