【问题标题】:Wordpress - Custom Variable session/cookie is not workingWordpress - 自定义变量会话/cookie 不起作用
【发布时间】:2014-04-08 14:19:38
【问题描述】:

我想为 WordPress 站点中的会话或 cookie 添加一些值。我正在尝试在 AJAX 中执行此操作。但它不起作用。通常我的会话或 cookies 变量不工作/创建。我找到了一些教程并尝试了,但仍然没有任何改进。

http://stackoverflow.com/questions/6183162/how-can-i-set-get-and-destroy-cookies-in-wordpress

http://blog.ginchen.de/en/2008/08/15/session-variablen-in-wordpress/
http://devondev.com/2012/02/03/using-the-php-session-in-wordpress/
http://www.thinkingoutloud.co.za/content/20091012/php_wordpress_and_session

当我使用 htaccess 注册全局变量时,如果我创建 php.ini 文件,我得到 500 内部错误。

感谢您阅读本文..

我在functions.php中的代码

function register_session(){
    if( !session_id() )
        session_start();
}
add_action('init','register_session',1);

function enquiry_ajax_request() {
    if ( isset($_REQUEST) ) {
        if(isset($_REQUEST['product'])){                
            $_SESSION['product'] = "Some data I need later";
            setcookie('my_cookie', 'some default value', strtotime('+1 day'));
        }
    }
}
add_action( 'wp_ajax_enquiry_ajax_request', 'enquiry_ajax_request' );
add_action( 'wp_ajax_nopriv_enquiry_ajax_request', 'enquiry_ajax_request' );

jquery

jQuery(document).ready(function($) {
    $( "#add-enquiry" ).click(function() {      
        $.ajax({
            url: '<?php echo admin_url( 'admin-ajax.php' ); ?>',
            data: {
                'action':'enquiry_ajax_request',
                'product' : '<?php echo get_the_ID(); ?>'
            },
            success:function(data) {
                console.log(data);
            },
            error: function(errorThrown){
                console.log(errorThrown);
            }
        });
    });
});

这是网站 http://davidrossfurniture.com/the-collection/product-one/another-chair/

当您单击“添加到查询”按钮时,它会调用带有产品 ID 的 ajax,必须将其添加到会话或 cookie 中。这是我必须做的。

ajax 链接: http://davidrossfurniture.com/wp-admin/admin-ajax.php?action=enquiry_ajax_request&product=524

【问题讨论】:

  • 请发布您自己的代码,这会产生 500 错误
  • 我的代码不会产生 500 错误,我只有在使用 htaccess 做某事时才会得到
  • 无论如何,代码对于了解您在做什么并发现问题是必要的。也发布您的.htaccess
  • 代码已添加,请检查
  • 您不必设置 register_globals - 对于像 $_SESSION 这样的超全局变量没有意义。自 PHP 4.2.0 起默认为 off,自 PHP 5.3.0 起弃用并在 PHP 5.4.0 中删除:php.net/manual/en/security.globals.php

标签: php wordpress


【解决方案1】:

现在 AJAX 返回会话 ID。尝试调试PHP部分,将一些实际数据返回给客户端并将其转储到浏览器控制台

function enquiry_ajax_request() {
    // No need to check $_REQUEST itself - it is always set
    if(isset($_REQUEST['product'])){
        $_SESSION['product'] = "Some data I need later";
        setcookie('my_cookie', 'some default value', strtotime('+1 day'));
    }
    $data = array(
        'request'=>$_REQUEST,
        'session'=>$_SESSION,
        'cookie'=>$_COOKIE,
    );
    echo json_encode($data);
}

更新: 问题可能出在 cookie 路径 中。在/wp-admin/ 之外似乎无法访问。尝试将其设置为/,如下所示:

setcookie('my_cookie', 'some default value', strtotime('+1 day'), '/');

【讨论】:

  • 感谢您的回复,您可以在控制台中查看为您创建的 cookie 吗?我已经更新了你的代码。它不工作。 davidrossfurniture.com/the-collection/product-one/another-chair
  • 是的,我承认设置了 SESSION var 和 cookie。这是第一个响应{"request":{"action":"enquiry_ajax_request","product":"524"},"session":{"product":"Some data I need later"},"cookie":{"PHPSESSID":"2a9778a9b3c0c5bd8699a867a8fead9f","_ga":"GA1.2.192593884.1394088481"}}(cookie 在第二个请求之前没有效果)。这是第二个{"request":{"action":"enquiry_ajax_request","product":"524"},"session":{"product":"Some data I need later"},"cookie":{"my_cookie1":"some default value","PHPSESSID":"2a9778a9b3c0c5bd8699a867a8fead9f","_ga":"GA1.2.192593884.1394088481"}}
  • 我也看到了,但是当我刷新页面时它会破坏
  • 奇怪,我的 Firefox 保存了它。过期日期是明天,即使在浏览器重新启动后 cookie 仍然存在
  • davidrossfurniture.com/the-collection/product-one/another-chair 我正在打印会话和 cookie 检查它,它不打印会话和 cookie 变量
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-21
  • 1970-01-01
  • 2013-11-10
  • 2015-09-30
  • 2013-04-12
  • 2012-08-17
  • 2014-05-16
相关资源
最近更新 更多