Есть ли способ передать переменную php, которая будет «скрыта», даже если пользователь проверит исходный код моей страницы?

когда я использую код вроде

<input type="hidden" name="foo" value="<?php echo $var;?>" />

$var отображается в исходном коде моей веб-страницы. Есть ли способ скрыть эту переменную от моих пользователей, которые видят мой исходный код, используя PHP/Codeigniter? Я использую codeigniter для своего проекта.

Короче говоря, я хочу отправить данные контроллеру при отправке формы. но не через URL-адрес или скрытые поля ввода html


person Rishad    schedule 11.11.2018    source источник
comment
Я думаю, вам придется передать значение с помощью сеансов.   -  person DigiLive    schedule 11.11.2018
comment
Вы можете зашифровать скрытое значение.   -  person Progrock    schedule 11.11.2018
comment
Похоже, что в CI есть библиотека шифрования. codeigniter.com/user_guide/libraries/encryption.html   -  person Progrock    schedule 11.11.2018
comment
Имеет ли значение, видят ли люди значение/переменную?   -  person Progrock    schedule 11.11.2018
comment
Спасибо за ваши ответы, ребята. И сеансы, и шифрование сделают свою работу. Я чувствую, что сеансы работают лучше для моего проекта. В любом случае спасибо ребята   -  person Rishad    schedule 12.11.2018


Ответы (2)


Вы можете использовать библиотеку сеансов codeigniter для хранения данных, которые не будут видны в исходном коде.

  • Библиотека сеансов должна быть загружена ($this->load->library('session'); или автозагрузка в application/config/autoload.php )
  • В вашем контроллере установите данные, которые вы хотите сохранить ($this->session->set_userdata(['your_secret_data_key' => 'your_secret_data_value']);)
  • Вы можете получить свои данные ($this->session->userdata('your_secret_data_key');)

Поэтому, прежде чем создавать форму, добавьте данные, а в контроллере, который будет обрабатывать вашу форму, вы можете получить ранее сохраненные данные.

Дополнительная информация о библиотеке сеансов: документация библиотеки сеансов Codeigniter

person fff    schedule 11.11.2018
comment
Спасибо за подробности. Я чувствую, что это решение будет более практичным, так как мне приходится иметь дело с сеансами, уже имеющимися в моем коде. Кроме того, шифрование и дешифрование не помогут, так как другие могут легко расшифровать. В любом случае, большое спасибо за ваше время - person Rishad; 12.11.2018

Вы можете использовать библиотеку шифрования, чтобы зашифровать это значение, прежде чем отправить его в представление, и после его получения снова расшифровать его.

Загрузка библиотеки: $this->load->library('encryption');

вы можете найти более подробную информацию в документации о его конфигурациях. шифрование

$var = 'value';
$var = $this->encryption->encrypt($var);
$this->load->view('view', array('var' => $var));

Теперь у вас есть зашифрованный $var, делайте все, что вам нужно, и после извлечения вы можете просто использовать это:

$var = $this->encryption->decrypt($var);
echo $var;    // value
person Sherif Salah    schedule 11.11.2018
comment
Спасибо за ответ. Но я чувствую, что установка сеанса и уничтожение после использования будут более полезными, поскольку любой может расшифровать мои зашифрованные данные. - person Rishad; 12.11.2018
comment
@Rishad, это было бы довольно бессмысленным шифрованием, если бы кто-нибудь мог его расшифровать. Ты будешь единственным, у кого есть ключ. - person Progrock; 12.11.2018
comment
@Rishad, вопрос заключается в том, что в форме, отправленной пользователем, есть некоторая полезная нагрузка. Я хочу отправить данные контроллеру при отправке формы. Сеансы могут быть для вас альтернативным обходным путем. Но сеансы могут несколько болтаться, таким образом, вы тесно связаны с переходными данными на стороне сервера. - person Progrock; 12.11.2018