• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

пхп и куки

romangaitur

Well-known member
20.06.2020
94
0
BIT
0
Добрый день.
Если кто знает или разбирается с PHP помогите пожалуйста.

Мне нужно создать функцию которая поместит в куки ключ и значение в параметрах.
Значение должно будет изменится что бы добавить слово. Например: привет

это должно помочь void moi_cookie(string $key, string $value)

Заранее спасибо!
 

rdh_x

Green Team
26.03.2018
63
5
BIT
0
Если еще актуально:
PHP:
setcookie ( string $name , string $value = "" , int $expires = 0 , string $path = "" , string $domain = "" , bool $secure = false , bool $httponly = false ) : bool

 

Full-R

Заблокирован
06.09.2020
72
39
BIT
0
Я себе написал вот такое API, которое автоматически поддерживает httpOnly Secure Cookie. Значение лучше заворачивать в base64. Вот пример:

PHP:
<?php

function detectSSL(): ?bool {

    // check HTTPS protocol
    if( isset($_SERVER['HTTPS']) ) {

        if( 'off' !== strtolower($_SERVER['HTTPS']) ) {

            return true;

        }

        if( 1 === (int)$_SERVER['HTTPS'] ) {

            return true;

        }

    }

    if( isset($_SERVER['HTTP_X_FORWARDED_SSL']) ) {

        if( 'on' === $_SERVER['HTTP_X_FORWARDED_SSL'] ) {

            return true;

        }

    }

    if( isset($_SERVER['HTTP_X_FORWARDED_PORT']) ) {

        if( 443 === (int)$_SERVER['HTTP_X_FORWARDED_PORT'] ) {

            return true;

        }

    }

    if( isset($_SERVER['HTTP_X_FORWARDED_PROTO']) ) {

        if( strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) === 'https' ) {

            return true;

        }

    }

    if( isset($_SERVER['REQUEST_SCHEME']) ) {

        if( strtolower($_SERVER['REQUEST_SCHEME'] === 'https') ) {

            return true;

        }

    }

    // check server port
    if( isset($_SERVER['SERVER_PORT']) ) {

        if( 443 === (int)$_SERVER['SERVER_PORT'] ) {

            return true;

        }

    }

    // non-SSL
    return null;

}

final class Cookie {

  public static $ssl;

  function __construct( ?bool $ssl ) {

    self::$ssl = $ssl;

  }

  private static function constructCookie( iterable $c ): string {

    $s = 'Set-Cookie: __Test_'. $c[ 0 ] .'='. rawurlencode( $c[ 1 ] ) .'; Expires='. date('D, d M Y H:i:s', $c[ 2 ]) . 'GMT' .'; Path='. $c[ 3 ] .'; Domain='. $_SERVER['HTTP_HOST'] .';';

    if( self::$ssl ) {

      $s .= ' SameSite=Strict; Secure; httpOnly;';

    }

    return $s;

  }

  public static function setCookie( iterable $d ): void {

    if( isset($d[ 0 ]) ) {

      foreach( $d as $dc ) {

        if( is_array($dc) ) {

          header(

            self::constructCookie($dc), false

          );

        }

      }

    }

  }

}

$cookie = new Cookie( detectSSL() );

// Example

$cookie::setCookie([

    [ 'test', base64_encode('test=привет_как_бы_так'), time() + 86400, '/' ],
    [ 'test1', base64_encode('test1=хрювед_как_бы_так'), time() + 86400, '/' ],
    [ 'test2', base64_encode('test2=зидарасьён_как_бы_так'), time() + 86400, '/' ]
   ...

]);

SetCookie и SetRaw cookie уступают простому header и имеют ряд багов поэтому лучше собирать строку заголовка вручную, а не доверять этому API от PHP.
 
Последнее редактирование:
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!