gakkie プログラミング 備忘録

tech::expert(現tech camp) 45期

キャッシュとクッキー、セッションについて

f:id:shuzou555:20190916115404p:plain

f:id:shuzou555:20190916120929p:plain

結論

  • キャッシュは動的ページを実現するためのものでは無く、
    画面表示の高速化を目的に画像やHTMLデータをブラウザに保持する。

  • セッションは「ログインしてからログアウトまで」のような一連の操作を言い、
    セッションデータはサーバー側に保持される。

  • クッキーはクライアントのパソコン(WEBブラウザ)でデータを管理しており、
    有効期限が切れるまで保持している。

[目次]

前提知識

HTTP通信について

HTTP通信とは?

通常WEBブラウザでWEBサイトを閲覧する場合にはHTTPという通信手段を用いて
サーバーとクライアント間を通信する。

そのHTTP通信は、HTML文書の通信を目的に作られており、
1つのURLに対し同じページを返すことしか出ません。(これを静的と言います。)

しかし、ショッピングサイトのカートや、ログインしたら見れるようなサイトなどは、
ユーザーの状態によって表示する内容が変化します。(これを動的と言う。)

こういったHTTPの弱点とも言える部分を解決したものがクッキーやセッションである。
クッキーやセッションは状態を持ちまわることで、何度画面遷移をしても、数日後にサイトを再度開いても、現在の状態の操作が行えるようになる。

ではクッキーとセッションは何が違うのか?また、キャッシュとは何なのでしょうか?

キャッシュとは?

  • 閲覧したサイトのデータの一時保存のこと
  • 一度見たwebサイトのデータをパソコンの中に一時的に保存しておく機能のことを言う
  • 再度アクセスした時にその保存したデータを表示させることで、より早くスムーズに処理がされる
  • 画像やHTMLのデータなどをクライアント(インターネットを閲覧する人)側のブラウザに保存することにより表示速度を向上させるもの
  • 同じページを何度も開いた場合に、同じ画像やHTML,CSS,javascriptなどのデータを何度もダウンロードする必要は無いため、ブラウザに自動的に保存されるというものです。
  • 使用者はクライアント

セッションとは?

  • セッションは一連の操作のこと。Cookieを使用してセッションIDの管理が行われている。
  • セッションのデータは「セッションID=ログイン情報」としての役割がある。
  • セッションはログイン情報を保持する役割がある。

クッキーとは?

f:id:shuzou555:20190916120459p:plain

  • クッキーとは、Webサイトを表示したブラウザのデータを保存しておく仕組みのことです。
  • ユーザーの購買履歴や、利用している地域などがわかる会員証のようなものとよく例えられます。
  • 2回目以降同じサイトに訪れる際は、初めてレスポンスを受けとる際に付与されたクッキー(会員証)を元にサーバーがブラウザを特定します。
    それによりユーザーに合ったコンテンツを効率的に表示できる機能です。

主な用途

  • ECサイトなどでの購入履歴やカートのデータの保存
  • ログイン時のIDやパスワードの保存
  • ユーザーのアクセス履歴にマッチした広告などを表示

クッキーのメリット

ユーザーサイド

企業サイド

  • ユーザーに合わせた情報を提供できる
  • サイト内でのユーザーの行動を管理できる
  • マーケティングに活用できる

クッキーのデメリット

ユーザーサイド

  • 情報が漏洩する可能性がある
  • データが蓄積されすぎるとブラウザの動作が遅くなることがある

企業サイド

  • ラッキングクッキーなどはユーザーに不快な印象を与える場合がある

mysqldumpの設定で詰まった話

dumpファイルの作り方

学ぶ目的

  • 毎回データを作るのは面倒。再利用したい。
  • 作業改善のため
$ mysqldump -h localhost [DB名] [テーブル名] -u root -p > simple.dump 

$ mysql -h localhost [DB名] -u root -p < simple.dump

とすべきコード、2つ目を

$ mysqldump -h localhost [DB名] -u root -p < simple.dump

dumpを間違えてつけてしまった。 割とよくあるミスらしい。

    今日の学び
  • dumpファイルの作り方がわかった。

(&:odd?)について

 > a, = (1..5).partition(&:odd?)
 => [[1, 3, 5], [2, 4]] 
 > a = (1..5).partition(&:odd?)
 => [[1, 3, 5], [2, 4]] 
 > a, b = (1..5).partition(&:odd?)                                                                            
 => [[1, 3, 5], [2, 4]] 
 > b
 => [2, 4] 
 > a, = (1..5).partition(&:odd?)

↑なぜaの後ろに「,」が入っていたのか不思議だったが下記のコードで納得

 > a, b = (1..5).partition(&:odd?)                                                                            
 => [[1, 3, 5], [2, 4]] 
 > b
 => [2, 4] 
a, = (1..5).partition { |num|  num.odd? }

SQLについて

SQLとは?

  • データベース言語の一つ
  • データベースの定義や操作を行うことができる
  • ISO(国際標準化機構)で規格が標準化されている。
  • 一度学習すればほかのデータベースでもほぼ同じように操作可能
  • 「シークェル」または「シーケル」と呼ばれている
  • SQLという名称は公式には何の略でもないとされる
  • IBMの操作言語「Structured Query Language」の略だと言われる事もあるようだがなんの略でもないらしい。
  • 公式には、「Structured Query Language」という略称はIBM社の言語についてのもの。
  • 標準規格のSQLの方は公式には何の略でもないということになっている
  • 参考URL

    SQLとは?データベース言語の基礎知識をわかりやすく解説!|発注成功のための知識が身に付く【発注ラウンジ】

    vagrantからDockerの構築まで(備忘録)190610 21:28:44

    vagrantからDockerの構築までの流れをまとめておくための記事

    //フォルダまで移動してから
    $ vagrant up
    

    しかしエラー発生

    There was an error while executing `VBoxManage`, a CLI used by Vagrant
    for controlling VirtualBox. The command and stderr is shown below.
    
    Command: ["startvm", "0", "--type", "headless"]
    
    Stderr: VBoxManage: error: Could not open the medium '/Users/〜/VirtualBox VMs/〜_default_〜〜/box-disk1.vmdk'.
    VBoxManage: error: VD: error VERR_FILE_NOT_FOUND opening image file '/Users/〜/VirtualBox VMs/〜/box-disk1.vmdk' (VERR_FILE_NOT_FOUND)
    VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component MediumWrap, interface IMedium

    190610 21:57:30
    調べてみた。
    どうやらエラーの原因はversionにあるようだ。
    一度virtualBoxのアプリをアンインストールし入れ直した

    qiita.com

    qiita.com

    ↓ソフトウェアの読み込みが弾かれた場合に対処法

    ouchi-it.com

    rails cがエラーになった時の対処方法

    rails cでエラー発生

    開発環境

  • VS Code
  • Rails 5.2.3
  • ruby 2.5.1
  • $ bundle exec rails c
    #エラー文
    Running via Spring preloader in process 62552

    色々調べてみた

    qiita.com

    Gemfile
    
    gem 'rb-readline'
    
    $ bundle install
    $ rails c
    
    Running via Spring preloader in process 63491
    Loading development environment (Rails 5.2.3)
    [1] pry(main)> 
    
    #成功

    【mysqlで文字コードをutf8にする設定】

    【mysqlで文字コードをutf8にする設定】
    mysql -u root -p
    mysql> show variables like "chara%";
    $ sudo vi /etc/my.cnf
    
    
    [mysqld]
    ...
    character-set-server=utf8 #mysqldセクションの末尾に追加
    
    [client]
    default-character-set=utf8 #clientセクションを追加
    
    :wq
    
    $ sudo service mysqld status              mysqld (pid  8535) is running...
    $ sudo service mysqld stop Stopping mysqld:                                           [  OK  ]
    $ sudo service mysqld startStarting mysqld:                                           [  OK  ]
    $ sudo service mysqld status mysqld (pid  12850) is running...
    $ sudo service mysqld stop