34

我需要使用 jQuery 设置一个 PHP $_SESSION 变量。如果用户单击图像,我想将与该图像关联的一条信息保存为 php.ini 中的会话变量。

我想我可以通过调用 php 页面或函数并将该信息附加到查询字符串来做到这一点。

有任何想法吗。我通过谷歌几乎没有找到帮助。

谢谢迈克

4

8 回答 8

80

你不能单独通过 jQuery 来做到这一点;您将需要 Ajax(可以使用 jQuery)和 PHP 后端的组合。一个非常简单的版本可能如下所示:

HTML:

<img class="foo" src="img.jpg" />
<img class="foo" src="img2.jpg" />
<img class="foo" src="img3.jpg" />

Javascript:

$("img.foo").onclick(function()
{
    // Get the src of the image
    var src = $(this).attr("src");

    // Send Ajax request to backend.php, with src set as "img" in the POST data
    $.post("/backend.php", {"img": src});
});

PHP(后端.php):

<?php
    // do any authentication first, then add POST variable to session
    $_SESSION['imgsrc'] = $_POST['img'];
?>
于 2009-03-03T19:16:22.290 回答
7

可能想尝试将 PHP 函数放在另一个 PHP 页面上,并使用 AJAX 调用来设置变量。

于 2009-03-03T19:08:40.093 回答
5

您正在寻找的是jQuery Ajax。然后只需设置一个 php 页面来处理请求。

于 2009-03-03T19:09:27.627 回答
5

这里的很多回复都在解决如何而不是为什么。PHP $_SESSION 键/值对存储在服务器上。这与存储在浏览器上的 cookie 不同。这就是为什么您能够从 PHP 和 JavaScript 访问 cookie 中的值的原因。更糟糕的是,来自浏览器的 AJAX 请求不包括您为网站设置的任何 cookie。因此,您必须让 JavaScript 提取会话 ID cookie 并将其包含在每个 AJAX 请求中,以便服务器能够对其进行正面或反面。从好的方面来说,如果 cookie 没有与 HTTP 标头一起发送,PHP 会话被设计为故障转移到 HTTP GET 或 POST 变量。

于 2009-03-03T20:51:46.353 回答
3

在 (backend.php) 中一定要包含 include

session_start();

-泰勒 http://www.hawkessolutions.com

于 2010-03-23T00:29:14.673 回答
3

我还自己设计了一个“php session value setter”解决方案(类似于 Luke Dennis 的解决方案。这里没什么大不了的),但是在设置了我的 session 值之后,我的需求是“跳转到另一个 .php 文件”。好的,我做到了,在我的 jquery 代码中......但有些东西不太奏效......

我的问题很简单:

- 在你“$.post”你的值到小的 .php 文件之后,你应该等待一些“成功/失败”返回值,并且只有在读取这个成功值之后,才执行跳转。如果您只是立即跳转到下一个大 .php 文件,您的会话值可能尚未设置到 php 会话运行时引擎上,并且您可能会在执行 $_SESSION["my_var"]; 时读取“空” 从目标 .php 文件。

就我而言,为了纠正这种情况,我以这种方式更改了我的 jQuery $.post 代码:

$.post('set_session_value.php', { key: 'keyname', value: 'myvalue'}, function(ret){
    if(ret==0){
        window.alert("success!");
        location.replace("next_page.php");
    }
    else{
        window.alert("error!");
    }
});

当然,你的 "set_session_value.php" 文件,应该返回 'echo "0"; ' 或 '回显“1”;'(或您可能需要的任何成功值)。

问候。

于 2011-03-21T10:43:56.430 回答
1

类似于卢克的答案,但使用 GET。

将此 php 代码放在 php 页面中,例如。获取页面.php:

<?php
$_SESSION['size'] = $_GET['size'];
?>

然后使用这样的 jQuery 脚本调用它:

$.get( "/getpage.php?size=1");

同意费德里科。在某些情况下,您可能会在使用 POST 时遇到问题,但不确定它是否与浏览器相关。

于 2014-05-05T09:50:35.277 回答
0

如果您在 javascript 部分将 onClick() 更改为 click(),它适用于 firefox。

$("img.foo").click(function()
{
    // Get the src of the image
    var src = $(this).attr("src");

    // Send Ajax request to backend.php, with src set as "img" in the POST data
    $.post("/backend.php", {"img": src});
});

于 2015-09-17T09:16:15.253 回答