2015-05-31 60 views
1

通过ajax将对象的标识符传递给服务器/控制器的最佳方式是什么(例如,我们在网站“book/edit/mybookname”以及如何更新本书实体“mybookname”通过ajax)?通过Ajax将实体的身份传递给控制器​​

我想到了一些方法,并想知道,最常见的,最安全的方法是什么:

1)那本书的ID控制器

- >问题:ID变量/域可以通过使用浏览器

2)的控制台来改变传递当前URL(window.location.href)提供给控制器,并在控制器

提取出了名的URL的 - >窗口.location.href不能被改变呃控制台..?

我知道我必须检查服务器端,如果用户应该有权限编辑实体。但是,如果他有多本书,他可能会将ID参数更改为他拥有的另一本书,然后他将在后台更改另一本书的演示文稿,而不是他目前正在浏览的那本书。

+1

您可以在用户访问“book/edit/mybookname”时设置会话变量。但我真的不明白这一点,如果用户想搞砸他/她自己的收藏品,那是他们的问题海事组织。 – jeroen

+0

嗨jeroen,Session变量没有帮助,你可以用不同的书打开几个标签。好吧,通常的方法是说:检查访问权限,但是当记录的用户试图操纵表单/参数时,最终他只能搞乱他的书。 – user3746259

+1

确保无法操作的唯一方法是使用不是来自用户的值,而是存储在服务器上的值。但正如你注意到的那样,这也可能会失败。所以,是的,他们的收藏,他们的问题,只要他们只能访问自己的东西。 – jeroen

回答

0

想到ajax你可以使用发布数据。这不能在浏览器地址栏中编辑。

var xmlhttp;  
} 

if (window.XMLHttpRequest) 
{// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
} 
else 
{// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState===4 && xmlhttp.status===200) 
    { 
     //do whatever with response 
    } 

    }; 
xmlhttp.open("POST","ajax/ajax.php); 
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
xmlhttp.send("field1=whatever&field2=whateverelse"); 
+1

嗨凯,谢谢你的回答。我认为这只是“移动”将值更改为另一个点的可能性。因为问题不是“传球部分”,问题是我需要在页面的某处存储id,并且此值可以是改变(在一个JS配置对象或隐藏的领域)。所以它不会改变任何使用POST或URL来传送ID。我的结论是现在我只是通过“window.location.href”,因为这个值不能改变。 – user3746259

相关问题