There are two other ways of doing this that I know of. You'd have to use the '/tag' command. In the commands that you give the player the items, have it check the player's tags.
Let's do the easy one first:
At the command block, the button activates to do
"execute as @p if entity @s[tag=!starterkit] run give @p ..."
"execute as @p if entity @s[tag=!starterkit] run tag @p starterKit
This command checks if the closest player does not have the tag starterKit. If the player doesn't have the tag, they get the item.
Then then the last chain commands gives them the tag starterKit.
To reset just do:
/tag @a remove starterKit
This version is more for getting one item, it should only be used when the player is in a secluded space so that the person that clicks the button is always the closest to these command blocks.
This command set is more advanced I recommend it for multiplayer mode so nothing goes wrong:
Have the button activate the command:
/execute as @p at @s run tag @s[tag=!starterDone] add starterKit
'/execute as @p' makes the closest player the target of the command
'at @s' means run the command at the target
'run' means the target runs the command. Basically, tell the target(closest player) to do the command, similar to when you type the command in chat.
'tag @s[tag=!starterDone]'
'!' means don't. So the target checks to see if they don't have the tag starterDone.
'add starterKit' adds the tag starterKit to the target(closest player)
Then somewhere else have a repeating command block that starts a chain of command blocks. All the command blocks will have this command:
/give @a[tag=starterkit,tag=!starterDone] ...
This detects all the players that have the tag 'starterkit' and don't have the tag 'starterDone'
Then have an extra chain command block at the end that has the command:
/tag @a[tag=starterkit,tag=!starterDone] add starterDone
This gives the player that gets the item the tag starterDone so the button won't work for them anymore
To reset this command set, just do these commands in order:
/tag @a remove starterKit
/tag @a remove starterDone