用Post写到Session - CakePHP

时间:2012-06-26 17:59:12

标签: ajax session cakephp post edit

我正在尝试将一组复选框ID发布到我的控制器中的操作。这是我的index.ctp脚本:

<script type="text/javascript">
$('.editSel_dialog').click(function()
{
    var selected = [];
    alert('Edit Selected Has Been Clicked');

    $("#[id*=LocalClocks]").each(function()
        {
        if(false != $(this).is(':checked'))
        {
            selected.push($(this).attr('id').replace('LocalClocks', ''));
        }
    });
    alert(selected);
    /*$.ajax(
    {
        type: 'POST',
        url: "/LocalClocks/editSelected/",
        data: selected,
        traditional: true,
        //contentType: "application/json",
        dataType: "text",
        success: function(data){ alert(data); alert('Edit Success');}
    });*/
    $.post('/LocalClocks/editSelected', { "Session" : selected }, function(data){
                   alert(data);
    });
});
</script>

我有一个ajax请求和一个post请求。我正在使用ajax,直到我看到帖子实际上可以修改php变量。大括号{ "Session" : selected }中的代码应该使用所选的数组修改Session变量。

我尝试在$this->data$this->request->data$_POST上使用调试,但它们都是空的。

我需要帮助将所选数组写入变量或其他内容。我在考虑写信给$this->Session,但我不确定我会怎么做。

提前致谢

2 个答案:

答案 0 :(得分:2)

使用Cake,要在$this->request->data中获取已发布的值,其姓名必须以data为前缀:

<强>使用Javascript:

$.post('/LocalClocks/editSelected', { "data[Session][selected]" : selected }, function(data){
               alert(data);
});

<强>控制器:

function editSelected()
{
  if($this->request->is('post'))
  {
    if(isset($this->request->data['Session']['selected']))
    {
      $this->Session->write('selected', $this->request->data['Session']['selected']);
    }
  }
}

答案 1 :(得分:1)

也许我错了,但我认为你不能直接从客户端使用ajax这样做。你可以分享你的声明来源你可以修改php变量吗?我用Google搜索没有运气,我能够修改PHP会话会很奇怪..它会非常不安全,说你可以使用Session Fixation / Injection或其他恶意技术

被修改

要为现有变量分配值,需要

进行ajax调用

$.post('/LocalClocks/editSelected', { "selected" : selected }, function(data){
                   alert(data);
    });

在您的控制器上,您将拥有类似这样的功能

function editSelected($selected){
$_SESSION["selected"] = $selected;
}

和瞧