2015-05-31 4 views
1

Каков наилучший способ передать идентификатор объекта через ajax на сервер/контроллер (например, мы находимся на сайте «book/edit/mybookname» и что обновить эту книгу? entity "mybookname" через ajax)?Pass ID объекта через Ajax для контроллера

Я думал о некоторых подходах и хотел бы знать, что наиболее распространенным и наиболее безопасным способом было бы:

1) Передайте идентификатор книги к контроллеру

-> Проблема: ID переменной/поле может быть изменено с помощью консоли браузера

2) Передать текущий URL (window.location.href) к контроллеру и извлечь имя из URL в контроллере

-> окна .location.href не может быть изменен ugh the console ..?

Я знаю, что мне нужно проверить на стороне сервера, если у Пользователя должен быть доступ к редактированию объекта. Но если у него есть более одной книги, он может изменить параметр id на другую книгу, которой он владеет, а затем он изменит другую презентацию книги в фоновом режиме, а не ту, которую он просматривает в настоящее время.

+1

Вы можете установить переменную сеанса, когда пользователь обращается к книге 'book/edit/mybookname'. Но я действительно не вижу смысла, если пользователь хочет испортить свою собственную коллекцию, это их проблема ИМО. – jeroen

+0

Привет jeroen, переменная сессии не помогла, вы можете открыть несколько вкладок с разными книгами. Итак, общий способ - сказать: проверить права доступа, но когда регистрируемый пользователь пытается манипулировать формами/параметрами, в конце концов он может испортить свои книги. – 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

Эй, кай, спасибо за ваш ответ. Я думаю, что это просто «переместит» возможность изменения значения в другую точку ... потому что проблема не в «проходящей части», проблема в том, что мне нужно хранить где-то на странице идентификатор, и это значение может быть изменено (в объекте конфигурации js или в скрытом поле). Поэтому он ничего не меняет, используя POST или URL для передачи идентификатора. И теперь я пришел к выводу, что просто передаю «window.location.href», потому что это значение не может быть изменено. – user3746259

Смежные вопросы